当我看到名字中带括号的函数时,我正在阅读源代码:
extern int LIB_(strcmp) ( const char* s1, const char* s2 );
extern char LIB_(tolower) ( char c );
那是什么?
我很困惑,因为我可以调用这样的函数:char c = LIB_(tolower)('A');
在C中,是否使用括号将函数名与参数分开并进行类型转换?
答案 0 :(得分:8)
这确实令人困惑。 LIB_(x)
是在某处定义的宏,它评估函数的真实名称。
因此函数的名称实际上不是LIB_(strcmp)
,而是LIB_(x)
宏的结果。最有可能的是,LIB_(x)
旨在将库名称/标识符添加到函数的开头,并且定义如下:
/* prepend libname_ onto the name of the function (x) */
#define LIB_(x) libname_ ## x
答案 1 :(得分:1)
您不仅会看到名称周围的括号,还会看到更多内容,例如LIB_(strcmp)
。在您的源代码中,LIB_
被定义为宏;要了解发生了什么,你需要阅读宏所做的事情。
这通常用于在某些标准化命名约定中修改库中函数的名称,或者向函数添加属性(以编译器特定方式)。
答案 2 :(得分:0)
我相信LIB_
是在某处定义的宏。