__FILE__可以由C++中的const char*引用
__FILE__ can be referred by const char* in C++?
在阅读链接自的memTrack库后,我有一个问题http://www.almostinfinite.com/memtrack.html
__FILE__
是否可以永远保存在类型为const char*
的变量中,并且不需要使用strdup()
?BlockHeader::Stamp
不使用strdup()
来分配__FILE__
字符串吗?
void BlockHeader::Stamp(char const *filename, int lineNum, char const *typeName)
{
myFilename = filename; // don't use strdup(filename) to assign?
myLineNum = lineNum;
myTypeName = typeName;
}
举一个例子继续描述我的问题:
//testFILE.cpp
#include <iostream>
const char* getStr()
{
return __FILE__;
}
void Print()
{
std::cout << __FILE__ << std::endl;
}
int main()
{
std::cout << getStr() << std::endl;
Print();
return 0;
}
经过测试,二进制testFILE可以打印两行"testFILE.cpp",这只是巧合吗?
__FILE__
在预处理时被扩展为字符串文字。如果你放
const char* getStr()
{
return __FILE__;
}
在testFILE.cpp
中,就好像你写了一样
const char* getStr()
{
return "testFILE.cpp";
}
适用于所有字符串文字的相同规则也适用于作为扩展CCD_ 9的结果的字符串文字:它们指向的字符串在应用程序的整个运行中都存在。
__FILE__
扩展为字符串文字。您可以将指向字符串文字(第一个字符)的指针存储在类型为char const*
的变量中。文字的生存期与程序执行相同。
谢谢大家。我明白了。
C/C++中的字符串文字保存在静态数据段中,因此文字的生存期与程序执行相同。
我把字符串文字和局部变量搞混了。
再次感谢。