本文目錄一覽:
C語言多個源程序宏定義的作用範圍
宏定義分類:
(1)不帶參數的宏定義
形式: #define 宏名 [宏體]
功能:可以實現用宏體代替宏名
使用實例: #define TRUE 1
作用:程序中多次使用TRUE,如果需要對TRUE的值進行修改,只需改動一處就可以了
(2)帶參數的宏: #define 宏名 ( 參數表) [宏體]
宏定義作用:
(1)方便程序的修改
上面的#define TRUE 1就是一個實例
(2)提高程序的運行效率
宏定義的展開是在程序的預處理階段完成的,無需運行時分配內存,能夠部分實現函數的功能,卻沒有函數調用的壓棧、彈棧開銷,效率較高
(3)增強可讀性
這點不言而喻,當我們看到類似PI這樣的宏定義時,自然可以想到它對應的是圓周率常量
(4)字符串拼接
例如:
#define CAT(a,b,c) a##b##c
main()
{
printf(“%d\n” CAT(1,2,3));
printf(“%s\n”, CAT(‘a’, ‘b’, ‘c’);
}
程序的輸出會是:
123
abc
(5)參數轉化成字符串
示例:
#defind CAT(n) “abc”#n
main()
{
printf(“%s\n”, CAT(15));
}
輸出的結果會是
abc15
(6)用於程序調試跟蹤
常見的用於調試的宏有,_ L I N E _,_ F I L E _,_ D A T E _,_ T I M E _,_ S T D C _
(7)實現可變宏
舉例來說:
#define PR(…) printf(_ _VA_ARGS_ _)
C語言宏的作用域
C的宏也有做用域之說?我倒是真不知道呀,搞了這麼多年的C
我只知道,宏定義從定義開始到取消定義止,它都是有效的,它是在編譯之前預處理替換的,不是在運行中的東西,對於最終的執行程序而言,它並不知道有宏這麼個東西
你可以做個簡單的試驗:
#include stdio.h
void main()
{
do
{
#define TEST 123
printf(“%d\n”,TEST);
}while(0);
#ifndef TEST
printf(“有生存周期”);
#else
printf(“沒有生存周期%d”,TEST);
#endif
}
/////////////運行結果:
123
沒有生存周期123
C語言中,提前終止宏定義作用域的命令是?
在C語言中,宏定義的作用域是從定義的那一行開始直到文件末尾,
但我們可以用#undef來提前終止宏定義的作用域。
請採納,謝謝。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/254497.html