【发布时间】:2017-06-06 13:15:29
【问题描述】:
我正在使用 avrx 构建在自定义微型设备上运行的软件,但我还是 C 的新手。 如makefile所示,它使用“c99 plus GCC extensions”。 今天终于碰到了一个老同事写的一段代码,让我很困惑:
#define SOMEDATA "ABC"
void main(void)
{
memcpy(SOMEDATA, "OK", sizeof("OK"));
printf(SOMEDATA);//it works just fine?!?!?
memcpy(SOMEDATA, "VERY_LONG", sizeof("VERY_LONG"));
printf(SOMEDATA);//well, now it go nuts. all i see is some random data.
}
为什么?
为什么main() 中的逻辑会这样?我以前认为 MACRO 的作用是常量,不能修改。
【问题讨论】:
-
宏是一个红鲱鱼 - 它们只是代码复制和粘贴。替换宏后,生成的代码是否有意义?
-
原因
"VERY LONG"失败可能是因为它溢出了为"ABC"分配的内存块。 -
@SkyLeeCorp 这说明了您所在公司的稳定性。老同事和新同事都不认识 C.:)
-
是的,当我将宏更改为像“Z”这样的真实字符串时,它也可以工作。
-
“某位老同事写的代码”——我真诚的建议是:“为你的生命奔跑吧!”