#define與typedef作用域


typedef作用域

如果放在所有函數之外,它的作用域就是從它定義開始直到文件尾;
如果放在某個函數內,定義域就是從定義開始直到該函數結尾;

#define作用域

不管是在某個函數內,還是在所有函數之外,作用域都是從定義開始直到整個文件結尾

//a.c
 typedef …//此處開始到文件結尾
 #define …//此處開始到文件結尾
 int negate(int num)
 {
 …
     typedef …//此處開始到該函數結束。注意,該函數內,此定義前,也不能用
     #define …//此處開始到文件結尾
 …
 }
 typedef …//此處開始到文件結尾
 #define …//此處開始到文件結尾
 void show()
 {
     typedef …//此處開始到該函數結束。
     #define …//此處開始到文件結尾
 }

總結:
(1) 不管是typedef還是define,都不能在定義之前使用;
(2) typedef受函數范圍影響,而define不受;
(3) 不管是typedef還是define,其作用域都不會擴展到別的文件,即使是同一個程序的不同文件,也不能互相使用。

  //例一: 
  #include <stdio.h> 
  void func(void) 
  { 
      #define TEST 100 
  } 
  int main() 
  { 
      printf("TEST = %d\n", TEST); 
      return 0; 
  } 
 運行結果: 
 TEST = 100 
 //例二: 
  #include <stdio.h> 
  int main() 
  { 
      printf("TEST = %d\n", TEST); 
      return 0; 
  } 
  void func(void) 
  { 
      #define TEST 100 
  } 
 編譯報錯:TEST未定義,define的作用域從定義開始的地方起才開始生效
重點!!!

1、在文件a.c中定義的宏,其可見范圍相當於a.c內部的static-global變量,僅a.c可以訪問
2、如果a.h中定義了一個宏,那么只要了x.c包含有a.h,此時x.c僅能夠訪問該宏。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM