预处理与结构体简述
1.?宏定義:(宏定義時必須小心,保證宏代換之后不會有錯,因為預處理程序對宏不做檢查。
宏定義在函數外,其作用域從宏定義開始到源程序結束,如果要終止其作用域, 用#undef 命令即可)
無參宏定義:#define
‘#’代表這是條預處理命令,define為宏定義命令
格式:#define 標識符 字符串(數值)
?
帶參宏定義;相當于一個自定義函數
格式:#define 宏名(形參表) 字符串
帶參宏定義中,形式參數不分配內存單元,而宏調用時,實參有具體的值,實參需要作類型說明。
帶參宏僅僅做符號代換,不存在值傳遞問題。
2.?文件包含:(將指定的文件插入該處命令行處代替該命令行,從而把指定的文件和當前 源文件連成一個源文件)
例如:#include<stdio.h>
??????#include”math.h”
區別在于:“”在當前文件目錄下找文件
<>在系統指定文件目錄下找文件
3.?條件編譯:(按照不同的條件去編譯不同的程序部分)
格式1:#ifdef 標識符
程序段1
#else
程序段2
#endfif
如果標識符被定義了就執行程序段1,否則執行程序段2
格式2:#ifndef 標識符
程序段1
#else
程序段2
#endfif
如果標識符未被定義了就執行程序段1,否則執行程序段2
格式3:#if 常量表達式
程序段1
#else
程序段2
#endfif
如果常量表達式的值非0,則執行程序段1,否則執行程序段2
?
4.?結構體:(將相關聯的數據打包成一個整體,傳輸時傳輸整個整體)
一般格式1:struct 結構體名
{
類型名1 成員名1;
類型名2 成員名2;
類型名3 成員名3;
。。。。。。
};
格式2:struct 結構體名
{
類型名1 成員名1;
類型名2 成員名2;
類型名3 成員名3;
。。。。。。
};
Struct 結構體名 ??/ ??*結構體名簡寫;
5.?#define 和 typedef
宏定義只是簡單的字符替換,而typedef可以讓新命名的標識符能更改定義的變量。
?
總結