https://www.gnu.org/software/m68hc11/examples/stdio_8h-source.html
我想知道_exfun()在使用C / C ++时上面的链接是什么意思,它做了什么?我见过一段代码片段。这是:
#ifndef _EXFUN
# define _EXFUN(N,P) N P
#endif
这段代码有什么作用?如果你解释一下,我会很高兴。谢谢
答案 0 :(得分:0)
我刚测试了它并且它链接了两个语句。
_EXFUN(printf("Hello, ");, printf("World!\n");)
显然,这是一个使用的hack,因此根据头文件中_EXFUN
的实现方式,将对预处理相同的语句进行不同的预处理。它主要与声明有关。但我不能举出任何有用的例子。
答案 1 :(得分:-1)
在C / C ++中,以#开头的任何内容都是预编译器标志。这意味着在编译程序之前,程序会解析以#开头的行并执行它们应该执行的操作。 #if,#ifdef,#ifnf只在条件满足时才包含if块中的代码,这意味着如果不满足条件,则不编译if中的代码。 #define用于宏定义和简单文本替换。
似乎在您引用的代码中,如果宏尚未定义,则将定义宏,以便将宏定义下面的代码转换为有效的C语法。我想如果有人想让stdio函数做其他事情或者以不同的方式定义,这可能会有用。在包含stdio.h之前,他们将实现define_EXFUN。