我正在尝试使用预处理器定义(在本例中为项目路径)和文件名来连接头文件的文件路径,但我一直在获得以下内容:"警告C4067:意外的令牌跟随预处理器指令 - 期望换行符"。我尝试了以下方法:
#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
也不起作用,但将错误更改为"错误C2006:' #include':预期文件名,找到'标识符'"。
我已经仔细检查过我的源文件是UTF-8,因此我不会无意中包含Unicode字符。 PROJECT_DIRECTORY似乎格式正确,路径正确。
我正在使用VS2015。
任何想法都将不胜感激!
答案 0 :(得分:2)
有两件事导致你的问题。
"A" "B"
变为"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"
。因此,您必须使用没有引号的标记,并在结尾处对结果进行字符串化。