首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >连接预处理器定义和字符串以创建#include路径

连接预处理器定义和字符串以创建#include路径
EN

Stack Overflow用户
提问于 2018-06-07 03:34:49
回答 1查看 416关注 0票数 2

我尝试使用预处理器定义(在本例中为项目路径)和文件名来连接头文件的文件路径,但我始终得到以下结果:"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。

任何想法都将不胜感激!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-07 03:40:56

有两件事导致了你的问题。

您试图将"AB".

  • #include "A""B"转换为的
  1. 语法无效。

您可以做的是将AB连接起来,然后将其转换为字符串文字。

#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"。因此,您必须使用不带引号的标记,并在最后对结果进行字符串处理。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50728230

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档