C 在头文件中定义一个指向 extern 函数的宏函数

标签 c extern strtok

我有一个关于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)

哪一种是实现结果的最佳且干净的方法?

非常感谢您的投入。

最佳答案

假设我正确理解你的意思:

  1. 您没有可用的 strtok 函数。
  2. 您使用一个库libother.a(只是为了给它起一个名字),该库内部使用strtok - 函数。
  3. 您没有该库的源代码。

罗布走在正确的道路上,但我认为方向错误......

您可以通过包装 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/

相关文章:

在C中比较两个文件中的字符串;

c - 为什么在 C 中应该使用 "extern"来声明函数?

c++ - extern const inside namespace 和 static const 类成员之间的区别?

c - C 组冠军排名排序

c - 一个线程控制多个其他线程

c - 指针数组外部问题

c - 奇怪的行为

c - 尝试与strtok类似的拆分和存储数组

c - 为什么strtok_s在第一次使用后返回0x00000001?

c - 使用c在linux上以 block 的形式读写