在阅读http://www.almostinfinite.com/memtrack.html链接的memTrack库后,我有一个问题
可以__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 #includeconst 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"; }
并且适用于所有字符串文字的相同规则也适用于作为扩展结果的字符串文字__FILE__
:它们指向的字符串存在于整个应用程序运行中.
__FILE__
扩展为字符串文字.您可以在类型变量中存储指向字符串文字(的第一个字符)的指针char const*
.文字的生命周期与程序执行相同.