C++中的__FILE__

最近在写项目时,发现一个非预期的结果。最后归结到程序用到的__FILE__上。一句话总结便是,__FILE__的结果是不可预期的。

项目时,我用__FILE__获取当前文件的位置,再通过相对路径获取一个配置文件的地址来读取。最后发现,在debug模式下可以正确读取到配置文件,但在release程序中找不到该配置文件。输出文件地址可以看到,在debug模式下,__FILE__返回的是该文件的全路径,即D:\path\file.cpp这样的。但在release编译时,__FILE__返回的只有文件名,这样后续读取配置文件便找不到文件。

如果看官方的定义,__FILE__的确只确保返回文件名。还有一种说法是,__FILE__返回的是编译时该文件的输入的地址。比如当前文件是D:\path1\path2\file.cpp

  • 如果编译命令为 gcc file.cpp,这时候只返回file.cpp
  • 如果编译命令为gcc path2\file.cpp,返回path2\file.cpp
  • 如果编译命令为gcc D:\path1\path2\file.cpp,返回D:\path1\path2\file.cpp

这样的结果也是合理的。因为__FILE__是编译器解释的一个宏,它自己也不会自动获取文件的全路径,只能获得输入时的部分路径信息。现在我不确定为何VS在不同编译模式下会给出不同的结果。无论如何,鉴于__FILE__的不稳定性,它不能用来去指定文件的位置。

Copyright © zhiqiang.org 2016 all right reserved,powered by Gitbook该文件修订时间: 2016-08-03 01:06:06

results matching ""

    No results matching ""