C Note(NO.4)

無參宏定義:#define 標識符 字符串

1) 宏定義不是說明或語句,在行末不必加分號,如加上分號則連分號也一起置換。
2) 宏定義必須寫在函數之外,其作用域爲宏定義命令起到源程序結束。如要終止其作用域可使用   #undef 標識符   命令。

3)可用宏定義表示數據類型,使書寫方便。例如:#define STU struct stu

4) 宏定義允許嵌套,在宏定義的字符串中可以使用已經定義的宏名。
 

 帶參宏定義:#define 宏名(形參表) 字符串

例如:#define MAX(a,b) (a>b)?a:b
1. 帶參宏定義中,宏名和形參表之間不能有空格出現。
2. 在帶參宏定義中,形式參數不分配內存單元,因此不必作類型定義。
3. 在宏定義中的形參是標識符,而宏調用中的實參可以是表達式。
4. 在宏定義中,字符串內的形參通常要用括號括起來以避免出錯。#define SQ(y) (y)*(y)
5. 宏定義也可用來定義多個語句,在宏調用時,把這些語句又代換到源程序內。

#define SSSV(s1,s2,s3,v) s1=l*w;s2=l*h;s3=w*h;v=w*l*h;
int l=3,w=4,h=5,sa,sb,sc,vv;
SSSV(sa,sb,sc,vv);

#include"文件名"

對文件包含命令還要說明以下幾點:
1. 包含命令中的文件名可以用雙引號括起來,也可以用尖括號括起來。例如以下寫法都是允許的:
#include"stdio.h"
#include<math.h>
但是這兩種形式是有區別的:使用尖括號表示在包含文件目錄中去查找(包含目錄是由用戶在設置環
境時設置的),而不在源文件目錄去查找;
使用雙引號則表示首先在當前的源文件目錄中查找,若未找到纔到包含目錄中去查找。

2. 文件包含允許嵌套,即在一個被包含的文件中又可以包含另一個文件。

 

預處理程序提供了條件編譯的功能:

1. 第一種形式:
#ifdef 標識符
    程序段 1
#else
   程序段 2
#endif

它的功能是,如果標識符已被 #define 命令定義過則對程序段 1 進行編譯;否則對程序段 2 進行編譯。如果沒有程序段 2(它爲空),本格式中的#else 可以沒有,即可以寫爲:
#ifdef 標識符
  程序段
#endif

eg:

#define NUM ok
#ifdef NUM
  printf("Number=%d\nScore=%f\n",ps->num,ps->score);
#else
  printf("Name=%s\nSex=%c\n",ps->name,ps->sex);
#endif
 

2. 第二種形式:
#ifndef 標識符
  程序段 1
#else
  程序段 2
#endif
與第一種形式的區別是將“ifdef”改爲“ifndef”。它的功能是,如果標識符未被#define 命令定義過則對程序段 1 進行編譯,否則對程序段 2 進行編譯。這與第一種形式的功能正相反。

 

3. 第三種形式:
#if 常量表達式
  程序段 1
#else
  程序段 2
#endif
它的功能是,如常量表達式的值爲真(非 0),則對程序段 1 進行編譯,否則對程序段 2 進行編譯。因此
可以使程序在不同條件下,完成不同的功能
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章