C中的函数命名:函数名中的括号

时间:2014-02-24 17:41:45

标签: c naming-conventions

当我看到名字中带括号的函数时,我正在阅读源代码:

extern int LIB_(strcmp) ( const char* s1, const char* s2 );
extern char LIB_(tolower) ( char c );
那是什么?

我很困惑,因为我可以调用这样的函数:char c = LIB_(tolower)('A');

在C中,是否使用括号将函数名与参数分开并进行类型转换?

3 个答案:

答案 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_是在某处定义的宏。