1. 程式人生 > >C++學習(二十七)(C語言部分)之 預處理命令

C++學習(二十七)(C語言部分)之 預處理命令

world! 條件編譯 *** 所有 表達 自己 函數的參數 .lib 修改

結構體 聯合 枚舉

聯合 只能保存最後賦值的結果
枚舉 所有可能值列出來

預處理命令
是在編譯前期的階段
代碼-(編譯)-->可執行文件(exe)
預編譯 編譯前對代碼處理
*1.插入頭文件的內容 #include<stdio.h>
*2.宏定義替換
3.刪除註釋--->註釋在預處理階段全部被刪除
*4.條件編譯

#----> 預處理符號

1.宏定義 #define
主要作用 定義一個宏 用於文本替換
宏 沒有類型可言
1.1無參宏定義
多用於常數的替換
可以不用一個一個的去修改常量
常用於常量 字符串 表達式 方便於檢查和修改


註意 不能重復定義
1.2帶參宏定義
帶參的宏 使用和函數類似
1.只是簡單地替換 不檢查類型 一般用它替換簡單的函數
2.直接替換 不會先計算 也不會檢查類型 (所以要註意有先級的問題)

函數的參數需要聲明類型 宏定義不需要

帶參宏定義 主要 替換簡單函數(會比函數快)
代碼比較長的函數就不適用了

2.文件包含

#include
包含函數定義

#include<stdio.h>//系統提供的 一般用<>
#include"stdio.h"//自己寫的頭文件用""

區別:
<>查找範圍在系統的文件下(如果找不到就顯示找不到)


""查找範圍-->現在當前文件下尋找,如果找到就直接使用 如果找不到就在系統文件下尋找 如果找不到就報錯

自己寫的頭文件在項目文件夾下只能用""
系統提供的頭文件 <>會查找的快一點

添加方式如下:

技術分享圖片

技術分享圖片

然後在源文件部分創建一個同名的.cpp文件 *****一定要同名*****

例如:

技術分享圖片

技術分享圖片

技術分享圖片

自己寫的頭文件

1.添加一個.h文件 和添加一個同名的.cpp文件
2..cpp文件包含頭文件
3.函數聲明放在.h裏面 定義放在.cpp中
函數聲明定義全放在.h中也可以
註意:1.如果放在.cpp裏面的函數需要調用其他函數 可以在.h裏面包含自己想要的頭文件


2.定義之後 項要使用這個函數 只需要在代碼中包含對應的頭文件即可
3.防止頭文件的相互包含
a.h b.h
a.h包含b.h 同時b.h包含a.h 文件相互包含 會導致錯誤

註意:1.一般預處理命令 後面最好不要加分號

3.條件編譯

#if //後面跟著一個條件 條件如果成立就執行後面的語句 編譯時候包含後面幾句 編譯之前可以確定的條件
#endif //結束

#elif //後面也會接條件 else if 不可以單獨使用
#else //不可以單獨使用

#ifndef //if not define 宏的作用只是判斷頭文件是否被包含
包含頭文件的時候定義一個宏 表示頭文件已經包含過了,避免頭文件的重復包含
#ifndef _INC_STDIO //若果沒有定義,那麽就定義一個宏
#define _INC_STDIO
#pragma once //防止頭文件重復包含 這個文件只會包含一次

#error
#pragma once 頭文件只包含一次
#pragma comment(LIB,"WINIMMM.LIB")
#pragma pack(n) 控制結構體對齊的


技術分享圖片

一、宏定義

1.無參宏定義

測試代碼筆記如下:

 1 //無參宏定義
 2 #include<stdio.h>
 3 #define PI 3.1415926  //定義的一個帶參數的宏 作用:文本替換
 4 #define Size 3*4+5
 5 #define HELLO "hello world!"
 6 #define 主函數 int main()
 7 #define 退出 return 0;
 8 
 9 主函數
10 {
11     printf("%lf\n", PI);
12     printf("%d\n", Size);
13     printf("%s\n", HELLO);
14     getchar();
15     退出
16 }

2.帶參宏定義

測試代碼筆記如下:

 1 //帶參宏定義
 2 #include<stdio.h>
 3 #define M(a,b)(a+b)
 4 #define POW(a,b)(a*b)
 5 //可選值不較少 可以直接用#define定義
 6 //可選值比較多 可以用枚舉比較方便
 7 int main()
 8 {
 9     printf("%d\n", M(3, 4));
10     printf("%d\n", POW(3, 4));//POW(3,4)換成3*4  只是替換沒有傳參
11     printf("%d\n", POW(3+4, 4));//POW(3+4,4)--->3+4*4 先替換,再計算
12     getchar();
13     return 0;
14 }

2019-03-28 15:13:58

C++學習(二十七)(C語言部分)之 預處理命令