[英]Can any one explain scope of c-macro's defined local to function and global?
我不知道為什么出現此輸出以及預處理器的行為。
輸出:
the value in main 10
the value in fun 20
the value in 2 main 10
資源
#include<stdio.h>
#define MAX 10
int fun(int a);
int main()
{
int a;
a=MAX;
printf("the value in main =%d\n",a);
fun(a);
int b;
b=MAX;
printf("the value in 2 main =%d\n",b); /*<----doubt at this line*/
}
當我們將新值分配給本地函數內部的宏時,為什么它不在函數外部進行更新,這是怎么回事?
int fun(int a)
{
#undef MAX
#define MAX 20
a=MAX;
printf("the value in 2 main =%d\n",a);
}
在運行時不檢查宏。 在編譯之前的一個預處理階段中對其進行檢查。
因此,編譯器首先處理main
函數,並在所有行中將MAX
替換為10。 然后,當到達fun
函數時,它將取消定義MAX
並將其重新定義為20,並將fun
的行替換為20。
當然,您已經在主要代碼之后編寫了fun函數的代碼。
編譯器按照在源代碼中找到它們的順序(而不是按照執行順序)更改其對應值的已定義宏。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.