我尝试使用预处理器定义(在本例中为项目路径)和文件名来连接头文件的文件路径,但我始终得到以下结果:"warning C4067: preprocessor指令后的意外标记-期望换行符“。我尝试了以下方法:
#define RESOURCE_PATH PROJECT_DIRECTORY "resource.h"
#include RESOURCE_PATH
和:
#define RESOURCE_FILE "resource.h"
#define RESOURCE_PATH PROJECT_DIRECTORY RESOURCE_FILE
#include RESOURCE_PATH
#include
线路上的两个产量警告C4067。我也尝试过:
#define RESOURCE_FILE "resource.h"
#define RESOURCE_PATH PROJECT_DIRECTORY ## RESOURCE_FILE
#include RESOURCE_PATH
这也不起作用,但将错误更改为"error C2006:'#include':expected a filename,found 'identifier'“。
我已经仔细检查过我的源文件是UTF-8,所以我没有无意中包含Unicode字符。PROJECT_DIRECTORY似乎格式正确,并且是正确的路径。
我使用的是VS2015。
任何想法都将不胜感激!
发布于 2018-06-07 03:40:56
有两件事导致了你的问题。
您试图将"AB"
.
#include "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++预处理器中无法将"A"
转换为A
或将"A""B"
转换为"AB"
。因此,您必须使用不带引号的标记,并在最后对结果进行字符串处理。
https://stackoverflow.com/questions/50728230
复制相似问题