相关疑难解决方法(0)

对于标题,相对路径有什么好处,例如"../include/header.h"?

我已经回顾了问题如何正确使用include指令C++ #include语义,并没有解决这个问题 - 当我输入标题时,SO也没有提出其他建议......

如果有的话,写作的好处是什么:

#include "../include/someheader.h"
#include "../otherdir/another.h"
Run Code Online (Sandbox Code Playgroud)

与仅使用普通文件名相比:

#include "someheader.h"
#include "another.h"
Run Code Online (Sandbox Code Playgroud)

或者没有' ..' 的相对名称:

#include "include/someheader.h"
#include "otherdir/another.h"
Run Code Online (Sandbox Code Playgroud)

我看到的问题是:

  • 您无法移动标题而不必担心哪些源文件包含它.
  • 您最终可能会在依赖项和错误报告中使用非常长的标头路径.我今天有一个" ../dir1/include/../../include/../dir2/../include/header.h".

我能看到的唯一优点是,虽然你不需要移动文件,但是你可以在不使用' -I'指令来查找标题的情况下逃脱,但是失去灵活性,以及​​子子编译的复杂性 - 目录等似乎超过了好处.

那么,我是否忽视了一项福利?


感谢您的投入.我认为大家一致认为,使用"......"的符号没有任何重大好处,我忽略了.一般来说,我喜欢"somewhere/header.h"符号; 我确实在新项目中使用它.我正在努力的是新事物.

其中一个问题是,有各种套头的,往往带有前缀,如rspqr.h,rsabc.h,rsdef.h,rsxyz.h.这些都与rsmp目录中的代码有关,但有些标题位于其中rsmp,其他标题位于中央include目录中,该目录中没有子目录rsmp.(并重复代码的其他各个方面;在多个位置都有标题,需要其他位代码随机使用.)移动内容是一个主要问题,因为多年来代码变得如此复杂.并且makefile与-I提供哪些选项不一致.总而言之,这是一个悲伤的故事,讲述了几十年来不那么温和的疏忽.在不破坏任何东西的情况下解决所有问题将是一项漫长而乏味的工作.

c header include

53
推荐指数
4
解决办法
7万
查看次数

C#include filename中的连接字符串

当#including文件名(在C中)时,是否可以从另一个宏连接字符串.例如,

我有,

#define AA 10 
#define BB 20
Run Code Online (Sandbox Code Playgroud)

这些是随程序运行而变化的参数

该文件包括:

#include "file_10_20" // this changes correspondingly i.e. file_AA_BB
Run Code Online (Sandbox Code Playgroud)

是否有可能以#include "file_AA_BB"某种方式?我用谷歌搜索发现双磅操作符可以连接字符串,但找不到这样做的方法.

任何帮助,将不胜感激.

c macros concatenation include c-preprocessor

13
推荐指数
2
解决办法
4033
查看次数

如何在include中使用预处理器宏?

我正在尝试使用自己的构建系统构建freetype2(我不想使用Jam,我准备花时间去搞清楚它).我在标题中发现了一些奇怪的东西.Freetype定义了这样的宏:

#define FT_CID_H  <freetype/ftcid.h>
Run Code Online (Sandbox Code Playgroud)

然后像这样使用它们:

#include FT_CID_H 
Run Code Online (Sandbox Code Playgroud)

我不认为这是可能的,确实Clang 3.9.1抱怨:

error: expected "FILENAME" or <FILENAME>
#include FT_CID_H
Run Code Online (Sandbox Code Playgroud)
  • 这些宏背后的基本原理是什么?
  • 这是有效的C/C++吗?
  • 我如何说服Clang解析这些标题?

这与如何在#include指令中使用宏有关但不同,因为这里的问题是关于编译freetype,而不是编写新代码.

c c++ preprocessor freetype2

9
推荐指数
2
解决办法
1447
查看次数