我最近发现,在MSVC(特别是2013)中使用__FILE__
预定义宏时,默认情况下会打印源文件的相对路径和头文件的绝对路径。
作为一个例子,我有一个包含以下内容的VS项目:
Solution
Project
Headers
foo.h
Sources
main.cpp
main.cpp和foo.h都在磁盘上的同一目录中。
main.cpp中:
#include <iostream>
#include <string>
#include "foo.h"
int main(int, char*[])
{
std::cout << __FILE__ << std::endl;
foo::bar();
std::cout << "Press enter to exit";
std::string str;
std::getline(std::cin, str);
return 0;
}
foo.h中:
#ifndef FOO_H
#define FOO_H
#include <iosfwd>
class foo
{
public:
static void bar()
{
std::cout << __FILE__ << std::endl;
}
};
#endif
当我运行应用程序时(在发布模式下,使用默认设置 - 使用/Zi
进行编译并且未定义/FC
),则输出为:
main.cpp
c:\users\<user>\documents\dev\solution\project\foo.h
Press enter to exit
我知道我可能会传入一个基本路径并在运行时删除它但我想知道是否有任何方法可以在编译时更改此行为?显然定义/FC
会产生相反的结果,我在MSVC手册中看不到任何其他内容来控制标题路径的显示。我认为这可能是一个硬编码的行为,所以如果编译器能够从不同的包含路径中获取两个名为foo.h的文件,您仍然可以区分它们,或者因为它可能具有与之无关的包含路径来源的基础和显示为相对将是凌乱的。