宏定義不完整引發的奇怪報錯

一 寫在開頭

1.1 本文內容

記錄一次奇怪的報錯和解決過程。spa

 

二 事情通過

今天在寫代碼的過程遇到了一個頗有趣的事。下面的代碼快速掃一遍很難發現其存在的問題,但我在編譯它時卻遇到了意外的報錯。代碼和報錯狀況以下。code

 1 #include <stdio.h>
 2 #include <string.h>
 3 
 4 #define FALSE
 5 #define TRUE
 6 #define MAX_RANGE_N     10005
 7 
 8 static char indexs[MAX_RANGE_N];  9 
10 void ScreenPrimes(char *indexs) 11 { 12     int i, j; 13 
14     memset(indexs, TRUE, sizeof(indexs[0]) * MAX_RANGE_N); 15     indexs[0] = indexs[1] = FALSE; 16 
17     for (i = 2; i < MAX_RANGE_N; i++) 18         if (indexs[i] == TRUE) 19             for (j = i + i; j < MAX_RANGE_N; j += i) 20                 indexs[j] = FALSE; 21 } 22 
23 int main(int argc, char *argv[]) 24 { 25     freopen("in.txt", "r", stdin); 26     int i, n, counter = 0; 27 
28  ScreenPrimes(indexs); 29     scanf("%d", &n); 30     for (i = 0; i <= n; i++) 31  { 32         if (indexs[i] == TRUE) 33  { 34             if (((i+2) <= n) && (indexs[i+2] == TRUE)) 35  { 36                 printf("%d %d\n", i, i+2); 37                 counter++; 38  } 39  } 40         else
41  { 42             continue; 43  } 44  } 45     if (counter == 0) 46         printf("empty\n"); 47 
48  fclose(stdin); 49     return 0; 50 }

看到沒,當時查錯的時候硬是完整仔細得看了一遍代碼,才發現,報錯的緣由居然是宏定義不完整!代碼在定義TRUE和FALSE兩個宏時後面居然沒寫數值!將這兩個宏定義改寫成以下形式,問題解決!blog

1 #define FALSE (-1)
2 #define TRUE  0
相關文章
相關標籤/搜索