标准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表示没有传入参数。
[解决办法]
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
[解决办法]
的确不能没有参数,所以我再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]
[解决办法]
将function强制类型转换为一个指向某一类函数的指针后,调用该函数。这类函数没有参数,没有返回值。
(但由于function本来被定义为“有一个void *参数,没有返回值”的函数,按照上面的方法调用后会导致函数调用堆栈不平衡,所以在之前插入一句嵌入汇编__asm push 0模拟C压入一个NULL参数。)