首页 > 解决方案 > 为什么这不是有效的语法?

问题描述

#include ("/" "include/foo.h")
#include ("/" "include/bar.h")

即,我已经得到了像.. char* a = "/" "include/foo.h"; 这样的工作。所以我想知道,为什么不将此作为预处理器的功能添加到?

或者也许..是否有任何支持这种语法的预处理器?

我的想法是你可以做类似的事情..

// config.h

#define LIB1_PATH "/include"

接着..

// main.c

#include "config.h"
#include (LIB1_PATH "foo.h")
#include (LIB1_PATH "bar.h")

如果您随后将“lib1”移动到项目的其他位置,您只需调整 config.h。

标签: c++g++

解决方案


为什么这不是有效的语法?

因为#include预处理指令的语法是cpp.include例如:

 # include " q-char-sequence " new-line 

( )那里不允许出现字符。"也不允许多个, q-charany member of the source character set **except** new-line and ".

为什么不将此作为预处理器的功能添加到?

因为这需要工作。去实施它。

有没有支持这种语法的预处理器?

我非常怀疑。不。

我的想法是你可以做类似的事情..

对于有限的情况,你可以使用预处理指令的形式:

 # include pp-tokens new-line

有关用法,请参阅此问题。但是,并非一切皆有可能,请参阅此答案

如果您随后将“lib1”移动到项目的其他位置,您只需调整 config.h。

不,典型的解决方案是向编译器添加包含路径。然后,如果您要移动lib1,您将更改构建和编译器选项,而无需对源代码进行任何修改。

保持#include 非常简单 - 它们是原始包含其他文件的一种非常粗略的方式。没有理由生成#include路径。


推荐阅读