我有一个关于C
中函数宏定义的问题(我是初学者):
我有一个 COTS 库 lib.a
,它使用 strtok()
函数,但我的 CERT 应用程序仅支持 strtok_r
,因此我收到错误编译时间。
如何在头文件中定义 strtok
函数应被 strtok_r
覆盖?
我尝试过类似的方法,但出现错误:
extern char *strtok_r(char *s1, const char *s2, char **saveptr);
#define strtok(s1,s2) strtok_r(s1,s2,saveptr)
哪一种是实现结果的最佳且干净的方法?
非常感谢您的投入。
最佳答案
假设我正确理解你的意思:
- 您没有可用的
strtok
函数。 - 您使用一个库
libother.a
(只是为了给它起一个名字),该库内部使用strtok
- 函数。 - 您没有该库的源代码。
罗布走在正确的道路上,但我认为方向错误......
您可以通过包装 strtok_r
函数来构建自己的 strtok
函数,如下所示:
将此函数插入您的源文件之一:
char *strtok(char *s1, const char *delim) {
static char* saveptr = 0;
return strtok_r(s1, delim, &saveptr);
}
然后按照通常的方式编译和链接代码
gcc your_code_file.c -lother -o your_binary
应该做。
但是:您应该更喜欢使用 strtok_r
而不是 strtok
,这是有原因的:
strtok
一次只能解析一个字符串,strtok_r
允许同时解析任意数量的不同字符串。
通过上面的“hack”,您将失去 strtok_r
的优势。
关于C 在头文件中定义一个指向 extern 函数的宏函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52021407/