C++ 连接预处理器定义和字符串以创建#包含路径
我试图使用预处理器定义(在本例中为项目路径)和文件名连接头文件的文件路径,但我始终得到以下信息:“警告C4067:预处理器指令后出现意外标记-需要换行符”。我尝试了以下方法:C++ 连接预处理器定义和字符串以创建#包含路径,c++,visual-c++,visual-studio-2015,c-preprocessor,C++,Visual C++,Visual Studio 2015,C Preprocessor,我试图使用预处理器定义(在本例中为项目路径)和文件名连接头文件的文件路径,但我始终得到以下信息:“警告C4067:预处理器指令后出现意外标记-需要换行符”。我尝试了以下方法: #define RESOURCE_PATH PROJECT_DIRECTORY "resource.h" #include RESOURCE_PATH 以及: #include行上的两个屈服警告C4067。我也尝试过: #define RESOURCE_FILE "resource.h" #define RESOURCE
#define RESOURCE_PATH PROJECT_DIRECTORY "resource.h"
#include RESOURCE_PATH
以及:
#include
行上的两个屈服警告C4067。我也尝试过:
#define RESOURCE_FILE "resource.h"
#define RESOURCE_PATH PROJECT_DIRECTORY ## RESOURCE_FILE
#include RESOURCE_PATH
这也不起作用,但将错误更改为“error C2006:'#include”:应为文件名,找到“identifier”
我已经仔细检查了我的源文件是否为UTF-8,所以我没有无意中包含Unicode字符。PROJECT_目录似乎格式正确,路径正确
我正在使用VS2015
任何想法都将不胜感激 有两件事导致了你的问题
“A”“B”
转换为“AB”
#包含“A”和“B”
的语法无效A
和B
连接起来,然后将其转换为字符串文字
#define STR_IMPL(A) #A
#define STR(A) STR_IMPL(A)
然后你可以这样做:
#define RESOURCE_FILE resource.h
#define PROJECT_DIRECTORY /foo/bar
#define RESOURCE_PATH STR(PROJECT_DIRECTORY/RESOURCE_FILE)
#include RESOURCE_PATH
<> >不幸的是,在C++预处理器中,没有办法将< <代码> > <代码> > < <代码> >或>代码>“B”<代码> > <代码> AB“<代码> >。因此,您必须使用不带引号的标记,并在最后将结果字符串化。令我惊讶的是。我从来不知道
#包含
扩展宏。非常感谢您的帮助,它工作得很好!
#define RESOURCE_FILE resource.h
#define PROJECT_DIRECTORY /foo/bar
#define RESOURCE_PATH STR(PROJECT_DIRECTORY/RESOURCE_FILE)
#include RESOURCE_PATH