C 宏定义需要多少内存空间?

C 宏定义需要多少内存空间?,c,macros,C,Macros,我的代码中有很多未使用的宏。 所以,我想知道。。如果宏未使用,它是否会占用程序中的内存空间 我拥有的宏类型只是基本类型。 例如: 宏将在预处理阶段展开,以便它们不存在于程序中。它们只是在源代码中占用了一些空间 编辑: 针对巴尔马的评论,我做了一些研究 MSVC 2012:在调试构建中(当所有优化都被禁用时,/Od),添加宏行不会导致程序大小的增长 GCC:提供了一种在调试信息中包含宏的方法,只要您使用特定的标志编译程序。看见(我之前不知道。谢谢你,@Barmar,@Sydius)不,在使用之前不

我的代码中有很多未使用的宏。 所以,我想知道。。如果宏未使用,它是否会占用程序中的内存空间

我拥有的宏类型只是基本类型。 例如:


宏将在预处理阶段展开,以便它们不存在于程序中。它们只是在源代码中占用了一些空间

编辑:

针对巴尔马的评论,我做了一些研究

MSVC 2012:在调试构建中(当所有优化都被禁用时,/Od),添加宏行不会导致程序大小的增长


GCC:提供了一种在调试信息中包含宏的方法,只要您使用特定的标志编译程序。看见(我之前不知道。谢谢你,@Barmar,@Sydius)

不,在使用之前不会占用空间,因为这两段代码:

#include <stdio.h>

int main(int argc, char *argv[])
{
    printf("%d %s\n", argc, argv[0]);
    return 0;
}
#包括
int main(int argc,char*argv[])
{
printf(“%d%s\n”,argc,argv[0]);
返回0;
}

#包括
#定义测试ID 0
int main(int argc,char*argv[])
{
printf(“%d%s\n”,argc,argv[0]);
返回0;
}

使用
gcc-S
生成的ASM是相同的。

宏在开始编译之前由预处理器替换。
如果您定义了一个宏,但不使用它,编译器将永远看不到它。

调试信息中是否包含这些宏,以便您可以在调试器中使用它们?我不确定。就发布版本而言(我假设OP真的关心这个问题,谁会关心调试版本的大小呢?),我认为这是正确的。有些编译器,如Intel的编译器,确实包含在编译单元的调试信息中包含宏信息的选项。但是,我不知道是否会编译出未使用的宏。尝试插入一个宏,如
#define unused这是一个愚蠢的未使用宏,用于测试目的,请忽略!!!!!111!11eleventy))
,编译并查看它是否对文件大小有任何影响。根据定义,编译时将在主代码中添加包含的宏代码。因此,在执行过程中,它将在内存中消耗一些空间RAM@Confused你能举出这方面的参考资料吗?它是否真的表示将添加未使用的宏?
#include <stdio.h>

int main(int argc, char *argv[])
{
    printf("%d %s\n", argc, argv[0]);
    return 0;
}
#include <stdio.h>

#define TEST_ID 0

int main(int argc, char *argv[])
{
    printf("%d %s\n", argc, argv[0]);
    return 0;
}