读书人

基准C中能实现这样的情况么?100分

发布时间: 2013-01-28 11:49:56 作者: rapoo

标准C中能实现这样的情况么??100分
最近想写一个函数,在调用的时候我想在某种情况下是不带参数的,某些情况下是带参数的。这样能实现吗?
例如:


#include <stdio.h>

void function(void *msg)
{
//这里就一些对字符串msg的处理。
}
int main()
{
char msg[20] = "test string";
function();
function(msg);
return 0;
}

要两种调用都能成功,并且带参的时候调用可以将参数传进去,不带参的时候也能成功调用函数。 c 参数
[解决办法]
用重载应该可以。

或者将函数写成
void function(void *msg = NULL)
这样
function();
function(msg);
都不会报错。
然后在函数内对msg判断下,如果为NULL表示没有传入参数。

[解决办法]
引用:
引用:同上
void funtiong ( void* msg =NULL);
Ok了
不对啊,我编译不过啊。
void funtiong ( void* msg =NULL);
这里报错啊:expected ‘;’, ‘,’ or ‘)’ before ‘=’ token

Sorry 刚才查了一下。C不支持默认参数
那标准C估计就木有办法了
[解决办法]
C做不了这个
[解决办法]
C对函数参数数量不要求匹配
void function(void *msg)
function();
function(a);
function(a,b);
function(a,b,c,d,e,f);
都是合法的代码,至于参数可以用变长参数的方法获取。
[解决办法]
在C语言中是可以做到的。但是使用的不是C++的默认构造函数的机制,而是不定参数,想想printf这样的函数。它就是带有不定参数的(也叫可变参数)。具体可以参看以下内容http://www.pconline.com.cn/pcedu/empolder/gj/c/0507/669879.html
[解决办法]
引用:
引用:在C语言中是可以做到的。但是使用的不是C++的默认构造函数的机制,而是不定参数,想想printf这样的函数。它就是带有不定参数的(也叫可变参数)。具体可以参看以下内容http://www.pconline.com.cn/pcedu/empolder/gj/c/0507/669879.html
+1
不过这个应该不能没有参数吧!
……

的确不能没有参数,所以我再23楼用了一个站位参数,以满足这个语法要求,本来还想解释一位为什么一定要写成那个样子的,好像画蛇添足似的用一个#define来搞定,但是论坛不让一个人连续发贴超过3次,所以就没有在写。推荐大家看看维基百科中的介绍,十分清除

[解决办法]
不能,C只能有变参函数,该函数还必须最少有一个参数。

[解决办法]
//要两种调用都能成功,并且带参的时候调用可以将参数传进去,不带参的时候也能成功调用函数。
#include <stdio.h>
void function(void *msg)
{
printf("msg==[%s]\n",msg);
}
int main()
{
char msg[20] = "test string";
__asm push 0
((void (*)())function)();
function(msg);
return 0;
}
//msg==[(null)]
//msg==[test string]

[解决办法]
引用:
引用:C/C++ code?12345678910111213141516//要两种调用都能成功,并且带参的时候调用可以将参数传进去,不带参的时候也能成功调用函数。#include <stdio.h>void function(void *msg){ printf("msg==[%s]\n",msg);}int main()……
((void (*)())function)();这句不太懂.能解释下吗

将function强制类型转换为一个指向某一类函数的指针后,调用该函数。这类函数没有参数,没有返回值。

(但由于function本来被定义为“有一个void *参数,没有返回值”的函数,按照上面的方法调用后会导致函数调用堆栈不平衡,所以在之前插入一句嵌入汇编__asm push 0模拟C压入一个NULL参数。)

读书人网 >C语言

热点推荐