簡體   English   中英

誰能解釋c-macro定義的局部函數范圍和全局范圍?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM