标题很清楚:将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/

10-12 15:35