将函数名获取为符号(而不是字符串)-C预处理器

将函数名获取为符号(而不是字符串)-C预处理器,c,gcc,c-preprocessor,C,Gcc,C Preprocessor,在C中是否有方法获取可以使用标记粘贴的函数名 (我知道\uuuu FUNCTION\uuuu和\uuuu func\uuuu,但它们在预处理时不会扩展到名称, 我不希望名称作为字符串) 我希望能够做到以下几点: prefix_35;#uuuu func_name_uuu,这样,在名为func1()的函数中,我可以访问 符号前缀\u func1 (也许我仍然可以使用string,然后使用dlsym,但我想知道是否有 GCC中更简单的替代方案,不必担心可移植性)。您可以将函数标识符设置为宏,如中所示

C中是否有方法获取可以使用标记粘贴的函数名 (我知道
\uuuu FUNCTION\uuuu
\uuuu func\uuuu
,但它们在预处理时不会扩展到名称, 我不希望名称作为字符串)

我希望能够做到以下几点:
prefix_35;#uuuu func_name_uuu
,这样,在名为
func1()
的函数中,我可以访问 符号
前缀\u func1

(也许我仍然可以使用string,然后使用
dlsym
,但我想知道是否有
GCC中更简单的替代方案,不必担心可移植性)。

您可以将函数标识符设置为宏,如中所示

#define FUNC1 func1

void FUNC1(void)
{
   ...
}

然后使用
FUNC1
进行标记粘贴。

由于C预处理器不知道函数是什么(或函数的边界是什么),因此不太可能通过预处理器实现您所寻求的功能,除非按照Jens建议的方式。是否可以将函数名作为参数传递?如果是这样,您可以将其作为参数传递,即使它需要更多的“一点”typing@Shahbaz,我在函数中有一个宏,它将展开并访问
前缀###uu函数u名称uu
,如果我可以将名称作为arg传递,我如何访问新符号?-你能详细说明一下吗?一个简单的例子。假设宏是这样的:
#define CALL(x,y)do{/*用x和y做一些事情*/prefix####func(u name)}while(0)
我的建议是这样的:
#define CALL(x,y,func(u name)do{/*用x和y做一些事情*/prefix######func)name()}while while
然后,如果您在函数
f
中,则编写
调用(x,y,f)g
,你写
调用(x,y,g)