【发布时间】:2014-04-25 06:14:58
【问题描述】:
我正在编写一个多线程应用程序,我想知道以下问题:
使用-D_REENTRANT宏时,是否需要显式使用_r后缀函数?
例如我应该在代码中的任何地方都使用strtok_r,还是可以使用strtok 并确保将-D_REENTRANT 宏传递给编译器?
非常感谢
【问题讨论】:
标签: c multithreading reentrancy
我正在编写一个多线程应用程序,我想知道以下问题:
使用-D_REENTRANT宏时,是否需要显式使用_r后缀函数?
例如我应该在代码中的任何地方都使用strtok_r,还是可以使用strtok 并确保将-D_REENTRANT 宏传递给编译器?
非常感谢
【问题讨论】:
标签: c multithreading reentrancy
定义_REENTRANT 不会改变strtok() 的语义。您需要使用strtok_r()。
【讨论】:
-D_REENTRANT 在任何现代系统上都是无操作的。
features.h,_REENTRANT 导致定义 __USE_REENTRANT。但是,唯一检查过__USE_REENTRANT 的地方是unistd.h 中的getlogin_r,如果定义了__USE_POSIX199506(在默认功能配置文件中定义),它也会暴露。
_REENTRANT 时使用不同版本的函数的做法是一种古老的黑客行为,从线程是新的和可怕的Unix。现在没有充分的理由这样做,并且有很多充分的理由不这样做(如果在编译某些文件时省略了细微的错误)。