gpt4 book ai didi

包含头文件中的 C 预处理器

转载 作者:行者123 更新时间:2023-11-30 18:43:44 24 4
gpt4 key购买 nike

我在名为 data.h 的头文件中定义了一个结构。

我将 data.h 包含在 myfile.c 中。

在结构中,我用以下内容封锁了部分变量:

#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我正在使用引用的 MIPSPro C 编译器 here .

最佳答案

您最近的编辑(当任何人阅读本文时可能会有所不同)将在包含一堆 printf() 语句的部分中遇到问题。该行:

 printf("%i\n", coord1.x);
无论 TEST 预处理器宏的设置如何,

都会引用结构体的 x 成员。它也需要位于条件编译部分内,以便在 x 成员不存在时正确编译(而不是根本不编译)。

关于包含头文件中的 C 预处理器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2194673/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com