__FILE__可以在C中用const char *引用?

前端之家收集整理的这篇文章主要介绍了__FILE__可以在C中用const char *引用?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在阅读 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
    #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";
}

并且适用于所有字符串文字的相同规则也适用于扩展__FILE__的结果的字符串文字:它们指向的字符串存在于整个应用程序运行中.

猜你在找的C&C++相关文章