首页 > 解决方案 > 如何在c中用#define更改#include?

问题描述

有没有办法改变#include 语法?这是我试图与此联系的一个示例。

#define begin {
#define end }
#define import #include
import <stdio.h>


int main() begin
 return 0;
end

标签: cc-preprocessor

解决方案


并不真地。至少不会以一种能够满足任何实际意义的方式。

首先,运行预处理器,直到将“import”更改为“#include”,然后将输出提供给编译器。但是编译器不理解预处理器指令。此外,C 语言没有任何包含文件的功能。这应该由预处理器处理。

所以可以做的一件事是运行预处理器两次,尽管这不是你在生产代码中应该做的事情。这种方法很可能会产生难以发现的错误。

$ cat a.c
#define begin {
#define end }
#define import #include 
import <stdio.h>
int main() begin
 return 0;
end

$ gcc -E a.c > b.c
$ cat b.c 
# 1 "a.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 31 "<command-line>"
# 1 "/usr/include/stdc-predef.h" 1 3 4
# 32 "<command-line>" 2
# 1 "a.c"



#include <stdio.h>
int main() {
 return 0;
}

$ gcc b.c
$

您可以将上述简化为一个命令,如下所示:

gcc -E a.c | gcc -xc -

(最后的破折号很重要)


推荐阅读