在C中使用标准函数名称

Sha*_*zad 4 c gcc standard-library

我正在编写一个名为nauty的程序.该程序使用规范函数名称getline,它也是标准GNU C库的一部分.

是否有可能在编译时告诉GCC使用这个程序定义的函数?

hyd*_*yde 6

一个解决方案

现在您在某些应用程序.h文件中声明了该函数,例如:

int getline(...); // the custon getline
Run Code Online (Sandbox Code Playgroud)

改为:

int application_getline(...); // the custon getline
#define getline application_getline
Run Code Online (Sandbox Code Playgroud)

我认为应该这样做.它还将修复.c定义函数的文件,假设它包含该.h文件.

另外,使用grep编辑器中的"查找文件"来确保该宏生效的每个地方都不会造成麻烦.

重要说明:在每个文件中,确保任何可能使用符号的标准标头之后.h包含该文件.你不希望那个宏在那些中生效......getline

注意:这是一个丑陋的黑客.然后,根据某些标准,几乎所有涉及C预处理器宏的内容都可以被视为丑陋的黑客;).然后,将现有的不兼容代码库进行合作和协同工作通常是一种可以接受黑客攻击的情况,特别是如果长期维护不是问题.

注2:根据这个答案并在评论中指出,这是C标准的未定义行为.请记住这一点,如果打算将软件维护更长时间,那么只需获得一次可运行的可执行二进制文件.但我添加了更好的解决方案.