标题很清楚:将basename
(man 3 basename
)与__FILE__
一起使用是否安全?
它可以编译并且工作正常,但 basename
的参数是char*
(不是const char*
),而man
-page表示:
所以,这让我担心。
也许问题应该更像是:__FILE__
的类型是什么?它不是字符串文字/ const char*
吗?但是如果是这样,为什么没有编译时错误(const char*
到char*
)?
最佳答案
仔细阅读basename(3)并注意:
并注意NOTES的说法
(重点是我的)
因为据说GNU版本不会修改其参数,所以与__FILE__
一起使用是安全的
顺便说一句,您可以考虑自定义GCC(例如MELT)来定义一些__builtin_basename
,如果给定字符串文字(如__FILE__
),它会在编译时计算基本名称,否则在运行时调用basename
。
注意libgen.h
有#define basename __xpg_basename
关于c++ - 将 `basename`与__FILE__一起使用是否安全?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38593014/