【发布时间】:2013-08-10 10:54:54
【问题描述】:
我是C的初学者,想问一下下面提到的2个不同代码中内存分配过程的区别:
#define MAX_LEN 10000
int main()
{
char str_new[MAX_LEN];
...
}
int main()
{
char str_new[10000];
...
}
这两个本质上不是一样的吗? 这两个内存分配方式会不会一样? 这在我搜索的问题中没有得到回答。虽然这两种不同的方法都经常使用。
【问题讨论】:
-
你需要了解编译的不同阶段。尝试阅读预处理器上的一些内容。
-
是的,它们是相同的——在实际编译之前执行直接字符替换,因此您最终会编译相同的字符。需要注意的是编码
#define MAX_LEN = 10000或#define MAX_LEN 10000;,因为它们包含您不想替换的字符。 -
另外,如果你曾经包含一个表达式,用
()包围它。例如,如果你先编码#define MY_CONST 5 + 10,然后再编码int x = MY_CONST * 3;,你会得到int x = 5 + 10 * 3;,结果是35而不是45。所以编码#define MY_CONST (5 + 10)。
标签: c string c-preprocessor