學C語言很久了,但還是不敢用宏定義,大神喜歡用宏定義。關于宏定義你又了解多少了,下面我們說一下宏定義。
宏定義的概念了解之後,注意宏定義的坑,這是真的坑,經常莫名其妙的出錯,這可能就要宏定義背鍋樂。
宏定義用好,幫助我們寫程序是有大作用的,可以簡化我們的程序和代碼。
宏定義是預處理命令的一種,它允許用一個标識符來表示一個字符串。 先看一個例子:
#include stdio.h
#define N 100
int main(){
int sum = 20 N;
printf("%d\n", sum);
return 0;
}
運行結果:
上面的程序中首先進行宏定義,定義M來替代表達式(n*n 3*n),在sum=3*M 4*M 5*M
中作了宏調用。在預處理時經宏展開後該語句變為:
sum=3*(n*n 3*n) 4*(n*n 3*n) 5*(n*n 3*n);
需要注意的是,在宏定義中表達式(n*n 3*n)兩邊的括号不能少,否則會發生錯誤。
對宏定義的幾點說明(這是坑,要牢記) 1) 宏定義是用宏名來表示一個字符串,在宏展開時又以該字符串取代宏名,這隻是一種簡單的替換。字符串中可以含任何字符,可以是常數,也可以是表達式,預處理程序對它不作任何檢查,如有錯誤,隻能在編譯已被宏展開後的源程序時發現。
2) 宏定義不是說明或語句,在行末不必加分号,如加上分号則連分号也一起替換。
3) 宏定義必須寫在函數之外,其作用域為宏定義命令起到源程序結束。如要終止其作用域可使用#undef命令。
4) 宏名在源程序中若用引号括起來,則預處理程序不對其作宏代換,例如:
#include stdio.h #define OK 100
int main()
{
printf("OK\n");
return 0;
}
該例中定義宏名OK表示100,但在 printf 語句中 OK 被引号括起來,因此不作宏代換,而作為字符串處理。
5) 宏定義允許嵌套,在宏定義的字符串中可以使用已經定義的宏名,在宏展開時由預處理程序層層代換。
6) 習慣上宏名用大寫字母表示,以便于與變量區别。但也允許用小寫字母。
7) 可用宏定義表示數據類型,使書寫方便。例如:#define UINT unsigned int
在程序中可用UINT作變量說明:UINT a, b;
應注意用宏定義表示數據類型和用typedef定義數據說明符的區别。宏定義隻是簡單的字符串代換,是在預處理完成的,而typedef是在編譯時處理的,它不是作簡單的代換,而是對類型說明符重新命名。被命名的标識符具有類型定義說明的功能。
宏定義雖然也可表示數據類型, 但畢竟是作字符代換。在使用時要分外小心,以避出錯。
好了,今天的宏定義你學會了嗎?一天一天積累,時間總會給你一個滿意的答案。
文章由源世界編輯,不得私自修改侵權發表,轉載請聯系作者!
歡迎訂閱點贊,謝謝!
,
更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!