歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

C語言中的宏定義

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