Scope of macros in C?

后端 未结 7 1571
不思量自难忘°
不思量自难忘° 2020-12-17 08:03

How these macros are evaluated?

# define i 20
void fun();

int main(){
  printf(\"%d\",i);
  fun();
  printf(\"%d\",i);
  return 0;
}

void fun(){
  #undef          


        
7条回答
  •  独厮守ぢ
    2020-12-17 08:47

    C Preprocessor works top to bottom irrespective of function calls. It is effective from that point (line) in whatever the file that macro is defined, until corresponding undef or till end of the translation unit.

    So, your code would become,

    # define i 20
                   // from now on, all token i should become 20
    void fun();
    int main()
    {
      printf("%d",i);   // printf("%d",20);
      fun();
      printf("%d",i);   // printf("%d",20);
      return 0;
    }
    void fun()
    {
    #undef i
                  // from now on, forget token i
    #define i 30
                  // from now on, all token i should become 30
    }
    

    Your second code would become,

    # define i 20
                   // from now on, all token i should become 20
    void fun()
    {
    #undef i
                   // from now on, forget i
    #define i 30
                   // from now on, all token i should become 30
    }
    int main()
    {
      printf("%d",i);    //  printf("%d",30);
      fun();
      printf("%d",i);    // printf("%d",30);
      return 0;
    }
    

提交回复
热议问题