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

在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 *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()