c - 如何在c中用#define更改#include?
问题描述
有没有办法改变#include 语法?这是我试图与此联系的一个示例。
#define begin {
#define end }
#define import #include
import <stdio.h>
int main() begin
return 0;
end
解决方案
并不真地。至少不会以一种能够满足任何实际意义的方式。
首先,运行预处理器,直到将“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 -
(最后的破折号很重要)
推荐阅读
- python - 使用 Homebrew 重新安装 Python 3 后无法运行 PyCharm 应用程序
- microsoft-graph-api - Microsoft Graph API 批量编辑 Excel 中的非连续行
- node.js - 无法升级到 Angular cli 版本 7
- c++ - SEH Eceptions - 生成和处理
- python - 我有一个这种格式的字符串:01/01 01:00:00
- python - wxPython。同步选择组合框
- android - 禁用 RecyclerView
- python-3.x - 捕获来自 QTimer 对象的最终信号
- javascript - 如何创建一个在悬停时出现并位于另一个布局之间的 2 个 div?
- ubuntu - 使用 Gstreamer 和 easycap 将摄像头视频从 raspberry 流式传输到 Ubuntu 机器