歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> C語言中的宏定義

C語言中的宏定義

日期:2017/3/1 11:16:51   编辑:Linux編程

C語言中的宏定義也叫做預處理命令,預處理命令是C語言本身的組成部分,不能直接對它們進行編譯。

1.基本概念;

1>預處理不是C語句,是在編譯前進行的

2>預處理功能主要用於下3種情況:

Ø 宏定義

Ø 文件包含

Ø 條件編譯

3>宏是在編譯前進行的,程序不能直接對它們進行編譯,由預處理程序先進行替換。

說明:

Ø 一個預處理命令占用一個單獨的行,命令末尾不使用分號作為結束符。

Ø 宏定義是專門用於預處理命令的一個專用名詞,它與定義變量的含義不同,它只做字符替換,不分配內存空間。

2.不帶參數的宏

1>用一個指定的標識符(即名字)來代替一個字符串,它的一般形式為

#define 標識符 字符串

Eg:

#define MAX_NUM 100

它的作用是在本程序文件中使用指定的標識符MAX_NUM來替代 100這個字符串。

2>宏定義是用宏名代替一個字符串,也就是做簡單的置換,不做正確性檢查。(預編譯時不做任何語法檢查,只有在編譯已被宏展開後的源程序時才會發現語法錯誤並報錯)

3>宏定義不是C語句,不必在行末加分號。如果加了分號則會連分號一起進行替換

4>#definde出現在A處,則宏名的有效范圍為定義命令之後到本源文件之後到本源文件結尾。

5>可以通過#undef命令終止宏定義的作用域.

#define MAX_NUM 100;

Void main()

{

……………………. MAX_NUM的作用范圍

………………….

};

#undedf MAX_NUM

f()

{

………………………….

…………………………

}

說明:當解除宏定義時,只需要指出宏標識符而不必給出後面的字符串。

6>在進行宏定義時,可以引用已定義的宏名,可以層層置換(即宏可以嵌套)

#define PI 3.141596

#define R 3.0

#define L 2*PI*R

#define S PI*R*R

7>對程序中使用雙引號括起來的字符串,即使與宏名相同,也不進行置換。

eg;

printf(“L =%f\n,s=%f\n”,L,S);

在printf中雙引號內的L不進行替換,雙引號外的進行替換。

Copyright © Linux教程網 All Rights Reserved