如何仅在非 C/C 中使用 gcc 进行宏扩展++语境?

发布于 2024-10-08 22:03:47 字数 533 浏览 10 评论 0原文

如何使用 gcc 来扩展包含(例如)python/php/perl 代码的文件中的宏?

有一个文件包含:

#define foo very important stuff
#define feast Christmas

I should take care of some foo for feast.

我尝试使用:

$ gcc -x c++ -E - < text.txt > output.txt

但它显示:

$ cat output.txt
# 1 "<stdin>"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "<stdin>"



I should take care of some very important stuff for Christmas.

如何避免 gcc 添加这些注释和(如果可能)额外的换行符?

How can I use gcc to expand macros in files containing (for example) python/php/perl code?

Having a file containing:

#define foo very important stuff
#define feast Christmas

I should take care of some foo for feast.

I have tried to use:

$ gcc -x c++ -E - < text.txt > output.txt

but it displays this:

$ cat output.txt
# 1 "<stdin>"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "<stdin>"



I should take care of some very important stuff for Christmas.

How to avoid gcc to add those comments and (if possible) the extra newlines?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

吻泪 2024-10-15 22:03:47

您应该注意GNU C 预处理器的在线文档中的此警告

C 预处理器的目的是
仅与 C、C++ 和 Objective-C 一起使用
源代码。过去,一直是
被滥用为通用文本处理器。它
会因输入而窒息
遵守C的词法规则。例如,
撇号将被解释为
字符常量的开头,以及
导致错误。另外,你不能依赖
它保留了特征
不重要的输入
C 族语言。如果 Makefile 是
预处理后,所有硬标签都会
被删除,并且 Makefile 将不会
工作。

输出中的“#”行可能是您遇到的问题中最少的。

使用不同的工具(例如 m4)可能会做得更好。

You should be aware of this warning from the online docs for the GNU C preprocessor

The C preprocessor is intended to be
used only with C, C++, and Objective-C
source code. In the past, it has been
abused as a general text processor. It
will choke on input which does not
obey C's lexical rules. For example,
apostrophes will be interpreted as the
beginning of character constants, and
cause errors. Also, you cannot rely on
it preserving characteristics of the
input which are not significant to
C-family languages. If a Makefile is
preprocessed, all the hard tabs will
be removed, and the Makefile will not
work.

The '#' lines in the output could be the least of your problems.

You might do better with a different tool, such as m4.

挽容 2024-10-15 22:03:47

我不知道gcc是否有特定的选项。

您可以使用 grep 进行后处理

$ gcc -x c++ -E - < text.txt | grep -v '^#' > output.txt

I do not know if there is a specific option for gcc.

You can postprocess with a grep

$ gcc -x c++ -E - < text.txt | grep -v '^#' > output.txt
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文