C语言中无复合语句的函数定义
在C语言中没有复合语句,我对以下函数定义感到困惑:C语言中无复合语句的函数定义,c,C,在C语言中没有复合语句,我对以下函数定义感到困惑: void __tu_finishme(const char *file, int line, const char *format, ...) tu_printflike(3, 4); 它似乎不会在生成的对象文件中生成函数,而链接器仍然希望\uu tu\u finishme已经编写。 从那以后我就觉得特别奇怪 void __tu_finishme(const char *file, int line, const char *forma
void
__tu_finishme(const char *file, int line, const char *format, ...)
tu_printflike(3, 4);
它似乎不会在生成的对象文件中生成函数,而链接器仍然希望\uu tu\u finishme
已经编写。
从那以后我就觉得特别奇怪
void
__tu_finishme(const char *file, int line, const char *format, ...) {
tu_printflike(3, 4);
}
似乎与前者有不同的(又称“正常”)联系
有人能解释一下我在这里遇到的C语言的哪个概念和定位,以及它是如何工作的吗
解释以下内容的额外积分:
void
foo(const char* c)
bar()
{
ha = hoo();
boo(ha);
}
tu_printflike
很可能是一个宏,可扩展为:
以上是特定于GCC的,因此宏的使用是为了实现跨编译器的可移植性,它可以定义为类似于
#ifdef __GNUC__
# define tu_printflike(i, j) __attribute__ ((format (printf, i, j)))
#else
# define tu_printflike(i, j)
#endif
你的奖励积分也可以用同样的方法来解释
#define bar()
如果定义只是一个空的令牌序列,则类似于宏的函数将扩展为空。
tu\u printflike(3,4)
是一个扩展为类似于\uuu属性的宏((\uu格式\uuuuuuuu(\uu printf\uuu,3,4))
。它不是函数的主体,它指示编译器进行一些检查。再见,谢谢。将tu_printflike
现在改为tu_printflike
,现在我那虚弱的小脑袋可以应付了;)
#define bar()