移出范围后,指向__FILE__的指针是否仍然有效?

Zhr*_*hro 4 c++ debugging

如果我想传递__FILE__给一个对象,我是否需要复制该字符串,或者我可以将其指针存储为const char*

我猜我需要制作一份副本,因为我认为它一旦超出范围就会自由.

指针是否__FILE__提供任何保证?

Bau*_*gen 8

__FILE__扩展为正常的字符串文字.所以只要你只是阅读它,你就可以使用const char*类似的东西

const char *filename = __FILE__;
Run Code Online (Sandbox Code Playgroud)

由于字符串文字具有静态存储持续时间,因此指针在整个程序中保持有效.

如果你想要一些可修改的东西,你需要一份副本并自己管理它的生命周期.

有关预定义标准宏的完整列表以及有关它们扩展的信息,请查看本文档页面上的"预定义宏"部分.

正如@Keith Thompson在他的评论中正确指出的那样,不同的扩展__FILE__可能会或可能不会产生相同的地址,即:

const char *f1 = __FILE__;
const char *f2 = __FILE__;
assert(f1 == f2);              // May or may not fire
Run Code Online (Sandbox Code Playgroud)

我不确定什么时候会咬你,但我知道这很好.