gpt4 book ai didi

c - 如何检查结构体中的变量是否未在 C 中使用?

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

这是我到目前为止的代码。

我试图判断结构内的某个变量是否为空。我将创建一个结构体,其中一些变量被填充,一些则没有,并且需要知道哪些变量需要我做某事,哪些不需要。

#include <stdio.h>
#include <stdlib.h>

struct nums {
int a;
int b;
int c;
int d;
} typedef numbers;

int main() {
numbers bob;

bob.a = 69;

if (bob.b == NULL) {
printf("no number stored in b");
}
return 0;
}

但我刚刚收到错误

warning: comparison between pointer and integer

有什么想法吗?

最佳答案

你想要做的事情在 C 中没有意义。
唯一的解决方案是分析您的代码并通过逻辑分析来证明使用(或不使用)某个变量。

无论如何,我会给出两个可以帮助你的想法。

<强>1。初始化为虚拟值

我们可以在变量类型范围内选择一个值,我们知道它在我们的程序处理的值中没有意义。
例如,对于 int类型一可以选择INT_MIN作为这样的虚拟值。
这是 int 的最大负值。类型可以容纳。
32 位 2 的补码 int这个值是 -2147483648 ,这可能就是你的情况。
[INT_MAX定义于 <limits.h> ,所以你必须#include它。]

#include <limits.h>
numbers bob = { INT_MIN, INT_MIN, INT_MIN, INT_MIN};
if (bob.b == INT_MIN) puts("Unused object.");

此方法有效,前提是您从未拥有 INT_MIN作为程序其余部分中的有效值。

<强>2。改变你的方法

而不是使用 int ,可以使用 pointer to an int :

#include <stdio.h>
#include <stdlib.h>
typedef struct { int *a, *b, *c, *d; } pnumbers;
int main(void) {
pnumbers bob = { NULL, NULL, NULL, NULL };
int val = 32;
bob.a = &val;
bob.c = malloc(sizeof(int));
bob->c = 20;
if (bob.a != NULL) printf("%d\n", bob->a);
if (bob.b == NULL) puts("Unused member");
if (bob.c != NULL) printf("%d\n", bob->c);
}

关于c - 如何检查结构体中的变量是否未在 C 中使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35387229/

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