__FILE__可以由C++中的const char*引用

__FILE__ can be referred by const char* in C++?

本文关键字:const char 引用 中的 C++ FILE      更新时间:2023-10-16

在阅读链接自的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++中的字符串文字保存在静态数据段中,因此文字的生存期与程序执行相同。

我把字符串文字和局部变量搞混了。

再次感谢。