zoukankan      html  css  js  c++  java
  • #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
    ", TEST); 
          return 0; 
      } 
     运行结果: 
     TEST = 100 
     //例二: 
      #include <stdio.h> 
      int main() 
      { 
          printf("TEST = %d
    ", 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仅能够访问该宏。

  • 相关阅读:
    从hadoop框架与MapReduce模式中谈海量数据处理
    Hadoop
    Clone Graph
    Gas Station
    ZigZag Conversion
    String to Integer (atoi)
    Palindrome Number
    Container With Most Water
    Longest Common Prefix
    求和问题总结(leetcode 2Sum, 3Sum, 4Sum, K Sum)
  • 原文地址:https://www.cnblogs.com/retry/p/14045305.html
Copyright © 2011-2022 走看看