【问题标题】:See expanded C Macros请参阅扩展的 C 宏
【发布时间】:2023-04-02 06:24:02
【问题描述】:

有没有办法查看预处理后扩展代码的样子? 在网上找到了很多我的问题的答案,但他们都使用了很多对我来说完全陌生的术语。 Seeing expanded C macros Determine the expansion of a C macro 我是一个完全的编程初学者。从 Y.K. 的“Let us C”中学习 C目前在第12章 'C 预处理器'。 有人可以简单地解释一下吗,还是我应该暂时搁置,稍后再处理?

使用 Code:Blocks 作为 IDE,使用 gcc 作为编译器。

编辑:-

#include<stdio.h>
#define AREA(x) (3.14*x*x)
int main()
{
    int r1=1,r2=2;
    float ar1,ar2;
    ar1=AREA (r1);
    printf(" %f",ar1);
    ar2=AREA (r2);
    printf(" %f",ar2);
    printf(" %f",ar1/ar2);
    printf(" %f",AREA (r1)/AREA (r2));
}

【问题讨论】:

标签: c macros


【解决方案1】:

使用-E 标志从终端编译您的代码:gcc my_code.c -E

这会将预处理后的代码直接打印到终端。如果您想将其保存到文件中,请在末尾添加 -o result.txt 之类的内容。

【讨论】:

  • 终端是指cmd?
  • @EMS 是的,没错。
  • ('gcc' 不被识别为内部或外部命令、可运行程序或批处理文件。)收到此错误。
  • @EMS 查找gcc.exe 在您的系统上的位置。然后按照here 的描述将该目录添加到PATH。然后它应该工作。确保在修改 PATH 后关闭并重新启动 CMD。
【解决方案2】:

阅读GCC 编译器的文档。

还可以阅读一些C reference 网站。

有一章是关于Invoking GCC的。花一个小时阅读它。

您还想阅读CPP preprocessor 的文档,可能还有GNU binutils 的文档。

您可以使用gcc -Wall -Wextra -g -H ems.c -o ems-prog 编译您的C 文件ems.c。一旦没有警告,请使用GDB 调试器了解可执行文件ems-prog 的行为

您可以运行gcc -Wall -Wextra -g -C -E ems.c -o ems.i 以在ems.i 文件中获取ems.c 的预处理形式

您可以在某些终端模拟器中运行编译命令。

稍后,您想使用GNU make(或ninja)或其他一些build automation 工具来驱动编译命令。当然,您需要阅读他们的文档。

研究用 C 编码的现有free software 的源代码,例如GNU bash

【讨论】:

  • 您可能想要明确地说,唯一真正必要的标志是-E,因此最小命令类似于gcc -E ems.c -o ems.i
  • 一般是的,但是一些优化标志可能会添加预处理器标志。保持 cmets 完好无损实际上很有用
  • 那么你可以说 OP 应该使用他们通常使用的相同标志,plus -E.
  • 我想问一下,在您的答案中包含指向切线相关主题的链接背后的想法是什么?如果每个答案都是这样,您认为 SO 会是一个更好的地方吗?我一直认为 SO 之所以如此受欢迎,是因为它是一个严肃的问答。如果我正在搜索“如何扩展宏”,我希望看到类似 “使用 -E 标志编译您的代码,如下所示:,请参阅 ” i>,不要挖掘六个链接来构建系统、shell、调试器等等。 ://
  • 主要思想是在询问之前阅读文档。我不明白为什么人们喜欢在阅读文档之前就 SO 提出问题,并且不提供任何 minimal reproducible example
猜你喜欢
  • 1970-01-01
  • 2023-03-07
  • 1970-01-01
  • 2014-09-13
  • 1970-01-01
  • 1970-01-01
  • 2012-01-25
  • 1970-01-01
  • 2015-01-27
相关资源
最近更新 更多