【发布时间】:2010-02-03 19:08:25
【问题描述】:
我在名为 data.h 的头文件中定义了一个结构。
我在 myfile.c 中包含 data.h。
在结构中,我将部分变量用以下方式屏蔽:
#ifndef TEST
int x;
#endif
在 myfile.c 我有:
#ifdef TEST
localx++;
#else
mystruct.x++; //<-compiler complains on this line when compiling
#endif
当我尝试使用-DTEST 进行编译时,我得到一个编译器抱怨mystruct 类型不包含名为x 的字段。这是怎么回事?
我手边没有 C 编译器,所以这是我刚刚输入的内容:
在data.h中
typdef struct {
#ifndef TEST
int x;
#endif
int y;
} coords;
在 myfile.c 中
#include "data.h"
static coords coord1;
int localx;
int main( )
{
#ifdef TEST
localx = 1;
#else
coord1.x = 1;
#endif
coord1.y = 2;
printf("%i\n", coord1.x);
printf("%i\n", coord1.y);
printf("%i\n", localx);
return 0;
}
当我输入 cc myfile.c 但不是 cc myfile.c -DTEST 时编译
我正在使用引用 here 的 MIPSPro C 编译器。
【问题讨论】:
-
请显示结构的完整声明。此外,包含它的部分,以及违规行周围的一些代码
-
你能确定你发布的是真实代码吗?现在,当且仅当它不被使用时,似乎有一个
x。如果有一个细微的错误,我们不会在没有真实代码的情况下捕获它。 -
好的,尝试在代码标签中发布更新帖子..但我认为# 将其扔掉了..但你可以理解
-
@Derek:您到底是如何调用编译器的? - 我的快速测试显示您的示例
data.h和myfile.c示例没有问题(data.h中关键字typedef的拼写错误除外) - 无论是否在编译器命令行上定义了 TEST。你真的应该考虑删除并重新发布这个问题,一旦你可以从你的问题中提供准确的剪切粘贴细节,这样这里的人就不会追逐鬼魂了。 -
你在“typdef”中有错字,但我想这只是一个复制粘贴问题
标签: c include c-preprocessor