当前位置:  开发笔记 > 编程语言 > 正文

为什么要定义函数原型,然后使用相同名称的预处理器宏?

如何解决《为什么要定义函数原型,然后使用相同名称的预处理器宏?》经验,为你挑选了1个好方法。

我正在读一本关于C的书,在作者代码的某处我发现了一个函数原型的定义,然后是一个具有相同名称的宏,并且在任何.h.c文件中都没有函数本身的定义.

我的意思是这样的:

int print_my_stufff(char *stuff);
#define print_my_stuff(A) (printf("%s\n", A))
/* and print-my-stuff() function never defined anywhere else */

代码有效,但我不知道为什么他首先需要一个函数原型?难道他不能写一个宏吗?重点是什么?是告诉编译器应该将宏评估为返回的表达式int还是什么?删除原型似乎不会改变行为.作者没有解释这一点.



1> Potatoswatte..:

inline功能开始,这是一种过时的做法.如果您按原样调用该函数print_my_stuff("hello"),则预处理器将看到调用语法并插入宏的内容.如果您使用其他名称f_ptr = &print_my_stuff,则编译器将使用实际函数.

调用该函数也(print_my_stuff)("hello")将绕过宏.一些偏执风格的指南甚至需要将某些函数名称括起来,因为Macros Are Evil.


@AndréFratelli如果使用该函数但从未定义过,则会出现链接错误.如果这本书描述的是编写一个没有定义的原型,那么它的问题比不合时宜的更深.
推荐阅读
我我檬檬我我186
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有