【发布时间】:2014-04-28 10:14:13
【问题描述】:
我在某处偶然发现了这个简单的程序
#include<stdio.h>
#include<stdlib.h>
char buffer[2];
struct globals {
int value;
char type;
long tup;
};
#define G (*(struct globals*)&buffer)
int main ()
{
G.value = 233;
G.type = '*';
G.tup = 1234123;
printf("\nValue = %d\n",G.value);
printf("\ntype = %c\n",G.type);
printf("\ntup = %ld\n",G.tup);
return 0;
}
它正在编译(使用 gcc)并且执行良好,我得到以下输出:
Value = 233
type = *
tup = 1234123
我不确定#define G 语句是如何工作的。 G 如何定义为 struct globals 类型的对象?
【问题讨论】:
-
您的
buffer太小,长度至少应为sizeof(struct globals)。 -
@user28264 提供了一个写得很好的和彻底的答案。如果它回答了您的问题或提供有关问题的更多信息/说明为什么它还不够,您应该将其标记为已接受。否则它将保持未答复状态,因为没有接受任何答案。
标签: c c-preprocessor