簡體   English   中英

如何檢查結構中的變量是否未在C中使用?

[英]How can I check if a variable in a struct is not used in C?

這是我到目前為止的代碼。

我想知道結構中的某個變量是否為空。 我將要創建一個結構,其中一些變量被填充而另一些變量不被填充,並且需要知道哪些變量需要我執行某些操作而哪些不需要。

#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 intpointer 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);  
}

通常,無法判斷您是否實際上已將某些內容存儲在int變量中。

但是,就您而言,您可以:

  • 初始化您的結構: numbers bob = { 0 }; // <-- this makes a, b, c, d equal to zero numbers bob = { 0 }; // <-- this makes a, b, c, d equal to zero
  • 然后檢查您是否有不同於 0

     if(bob.b == 0){ printf("no non-zero number stored in b"); } 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM