读书人

使用宏作为函数的实参会有什么有关问题

发布时间: 2012-02-25 10:01:49 作者: rapoo

使用宏作为函数的实参会有什么问题吗
在C语言中把一个宏作为函数的实参会有什么问题吗?
如:
#define NOTHING_TO_BE_DONE 5
'''
main()
{
'''
void SetCmd( NOTHING_TO_BE_DONE );
}

我以前没这样用过,也很少看到别人这样用,不知道这样的用法会带来什么样的不良后果,但个人感觉应该没什么问题.
我水平不高,希望有经验的高手不吝赐教,谢了.


[解决办法]
没问题,宏就是替换。
[解决办法]
你在函数里面直接用宏就行了,没有必要传递的
[解决办法]
没问题
但是基本上没人这么用(至少我没怎么看到)
宏就是个替换!
[解决办法]
这样的宏用起来没什么问题,如果是带参数的宏就要注意它的严谨性了---主要是参数的(),稍不注意就会出意外!
[解决办法]
什么问题?
有一个微小的问题就是函数调用时多占用了一点栈的空间
并多执行了几条汇编指令
[解决办法]
#define NOTHING_TO_BE_DONE 5
' ' '
main()
{
' ' '
void SetCmd( NOTHING_TO_BE_DONE );
}


=======================
在预编译期你上面的代码就会被替换成这样
#define NOTHING_TO_BE_DONE 5
' ' '
main()
{
' ' '
void SetCmd(5);
}


宏只是符号替换,在预编译期已经做完了,跟你直接写
void SetCmd(5); 没啥区别

唯一不同的一点的宏能做到统一修改

比如你代码大量使用了相同意义的5,就可以使用NOTHING_TO_BE_DONE,如果哪天想改成6

直接改宏就成了


鄙人不知说的可好,但愿能有点用
[解决办法]
这样写没有任何问题,兄弟:)
[解决办法]
完全没有问题,不影响运行期间的效率。

读书人网 >C语言

热点推荐