【问题标题】:Do I need to explicitly use `_r` suffix when using `-D_REENTRANT`?使用 `-D_REENTRANT` 时是否需要显式使用 `_r` 后缀?
【发布时间】:2014-04-25 06:14:58
【问题描述】:

我正在编写一个多线程应用程序,我想知道以下问题: 使用-D_REENTRANT宏时,是否需要显式使用_r后缀函数?

例如我应该在代码中的任何地方都使用strtok_r,还是可以使用strtok 并确保将-D_REENTRANT 宏传递给编译器?

非常感谢

【问题讨论】:

标签: c multithreading reentrancy


【解决方案1】:

定义_REENTRANT 不会改变strtok() 的语义。您需要使用strtok_r()

【讨论】:

  • 此外,-D_REENTRANT 在任何现代系统上都是无操作的。
  • 谢谢你的回答,@R.. 你能解释一下你的评论吗?
  • 在基于 glibc 的系统上检查 features.h_REENTRANT 导致定义 __USE_REENTRANT。但是,唯一检查过__USE_REENTRANT 的地方是unistd.h 中的getlogin_r,如果定义了__USE_POSIX199506(在默认功能配置文件中定义),它也会暴露。
  • 我没有其他系统的任何数据,除了说在定义 _REENTRANT 时使用不同版本的函数的做法是一种古老的黑客行为,从线程是新的和可怕的Unix。现在没有充分的理由这样做,并且有很多充分的理由不这样做(如果在编译某些文件时省略了细微的错误)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-19
  • 1970-01-01
  • 2010-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多