c宏扩展时,为什么代码会变得这么大?

问题描述 投票:0回答:1

我一直在试验C的宏,决定把它们展开来看看替换。当我给gcc提供 -E我得到了800行代码,只是这个简单的代码。

#include <stdio.h>
#define TEN 10

int main(void) {
    printf("hello world %d", TEN);
    return 0;
}

我的问题是:

  • 为什么会有这么多行代码?
  • 这么多行,C语言怎么能跑得这么快?
  • 这么多行是个问题吗?
c gcc macros line-numbers
1个回答
3
投票

选项要求gcc在预处理器阶段后不编译而停止,所以你最终得到的是(本质上)你系统的整个 stdio.h 文件复制并粘贴到你的程序头中。这肯定是800行程序的来源。

但这不是问题,因为当你编译你的约800行程序时,在 stdio.h 在你的代码中不用的,不会占用你的可执行文件的空间。

至于'C语言怎么能用那么多行来运行这么快',要记住,我们写的源代码不是机器执行的,机器执行的是编译器根据源代码生成的编译二进制文件。

如果你去掉 #define TEN 10 并将printf行改为 printf("hello world %d",10); 并运行 gcc-E 再次,你会发现几乎和之前一样的800行源文件。这不是一个关于 #define 这只是C预处理器的工作方式,没什么好担心的 :)

© www.soinside.com 2019 - 2024. All rights reserved.