亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

常用C/C++預處理指令詳解

2020-01-26 15:11:20
字體:
來源:轉載
供稿:網友

  預處理是在編譯之前的處理,而編譯工作的任務之一就是語法檢查,預處理不做語法檢查。預處理命令以符號“#”開頭。

  常用的預處理指令包括:

宏定義:#define
文件包含:#include
條件編譯:#if、#elif、#ifndef、#ifdef、#endif、#undef
錯誤信息指令:#error
#line指令
布局控制:#pragma

宏定義

  宏定義又稱為宏代換、宏替換,簡稱“宏”。宏替換只作替換,不做計算,不做表達式求解。宏定義分帶參數的宏定義和不帶參數的宏定義。在帶參數的宏定義,宏名和參數的括號間不能有空格。

  宏定義不分配內存,變量定義分配內存。

  宏展開不占運行時間,只占編譯時間;函數調用占運行時間(分配內存、保留現場、值傳遞、返回值)。

  出現在宏定義中的#運算符把跟在其后的參數轉換成一個字符串,有時把這種用法的#稱為字符串化運算符。例如:

復制代碼 代碼如下:

#include<iostream>
using namespace std;

#define STR(n)"abcd"#n

int main()
{
    cout<<STR(6)<<endl;
    system("pause");
    return 0;
}

  輸出結果為:

  ##運算符用于把參數連接到一起,預處理程序把出現在##兩側的參數合并成一個符號。例如:

復制代碼 代碼如下:

#include<iostream>
using namespace std;
#define STR(a,b,c) a##b##c
int main()
{
    cout<<STR(1,2,3)<<endl;
    system("pause");
    return 0;
}

  輸出結果為:

文件包含

  #include<文件名>稱為標準方式,到系統頭文件目錄查找文件,#include"文件名"則先在當前目錄(用戶路徑)查找,而后到系統頭文件目錄查找。

  我們以#include<iostream.h>和#include<iostream>為例說明:iostream.h是C語言格式的頭(庫)文件,為舊版本的標準庫,只支持窄字符集;而iostream為C++的標準頭文件,支持窄字符集和寬字符集。

  被包含文件中的靜態全局變量不用在包含文件中聲明。

條件編譯

  使用條件編譯可以使目標程序變小,運行時間變短。

  #undef指令,用來刪除事先定義的宏定義,其一般形式為:#undef宏替換名

錯誤信息指令

  #error指令,該指令用于程序的調試,輸出一個錯誤信息,當編譯中遇到#error指令就停止編譯。其一般形式為:#error出錯信息。

復制代碼 代碼如下:

#ifndef __cplusplus
#error this is not a C++ complier.
#endif
#include<iostream>
using namespace std;
int main()
{
    system("pause");
    return 0;
}

#line指令

  命令#line改變_LINE_與_FILE_的內容,它們是在編譯程序中預先定義的標識符。

  其格式為:#line number [ filename ],這條指令可以改變當前的行號和文件名。

復制代碼 代碼如下:

#include<iostream>
using namespace std;

#line 100 "a.cpp"

int main()
{
    cout<<__LINE__<<'/t'<<__FILE__<<endl;
    system("pause");
    return 0;
}

  運行結果:

布局控制指令

  在所有的預處理指令中,#Pragma 指令可能是最復雜的了,它的作用是設定編譯器的狀態或者是指示編譯器完成一些特定的動作。#pragma指令對每個編譯器給出了一個方法,在保持與C和C++語言完全兼容的情況下,給出主機或操作系統專有的特征。依據定義,編譯指示是機器或操作系統專有的,且對于每個編譯器都是不同的。

  其格式一般為: #pragma Para,其中Para 為參數。

message 參數:在編譯信息輸出窗口中輸出相應的信息

復制代碼 代碼如下:
#pragma message("消息文本")

code_seg參數:設置程序中函數代碼存放的代碼段,當我們開發驅動程序的時候就會使用到它

復制代碼 代碼如下:
#pragma code_seg(["section-name"[,"section-class"]])

#pragma once:

  只要在頭文件的最開始加入這條指令就能夠保證頭文件被編譯一次,但移植性差。如果寫的程序要跨平臺,最好使用C++中的宏定義。

#pragma hdrstop:表示預編譯頭文件到此為止,后面的頭文件不進行預編譯。

#pragma resource:

復制代碼 代碼如下:
#pragma resource "winform.dfm"

表示把winform.dfm文件中的資源加入工程,winform.dfm中包括窗體外觀的定義。

#pragma warning:輸出警告信息。

我們運行一下程序:

復制代碼 代碼如下:

int main()
{
    float f=3.6;
    int i=f;
    cout<<i<<endl;
    system("pause");
    return 0;
}

會出現如下警告信息:

復制代碼 代碼如下:
1>ClCompile:1>f.cpp1>c:/users/gaohongchen/desktop/45/5/5/f.cpp(12): warning C4305: “初始化”: 從“double”到“float”截斷1>c:/users/gaohongchen/desktop/45/5/5/f.cpp(13): warning C4244: “初始化”: 從“float”轉換到“int”,可能丟失數據

若我們在程序上方添加:

復制代碼 代碼如下:
#pragma warning(disable:4305)

則編譯時警告信息會變為:

復制代碼 代碼如下:

1>ClCompile:
1>f.cpp
1>c:/users/gaohongchen/desktop/45/5/5/f.cpp(12): warning C4305: “初始化”: 從“double”到“float”截斷
1>c:/users/gaohongchen/desktop/45/5/5/f.cpp(13): warning C4244: “初始化”: 從“float”轉換到“int”,可能丟失數據

若我們在程序上方添加:

復制代碼 代碼如下:
#pragma warning(error:4244)

則警告信息會變為錯誤信息:

復制代碼 代碼如下:

1>ClCompile:
1>f.cpp
1>c:/users/gaohongchen/desktop/45/5/5/f.cpp(13): warning C4244: “初始化”: 從“float”轉換到“int”,可能丟失數據

#pragma comment:該指令將一個注釋記錄放入一個對象文件或可執行文件中。

  常用的lib關鍵字,可以幫我們連入一個庫文件。例如:

復制代碼 代碼如下:
#pragma comment(lib,"wsock32.lib")

#pragma disable:在函數前聲明,只對一個函數有效。該函數調用過程中將不可被中斷。一般在C51中使用較多。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久影视电视剧免费网站清宫辞电视| 精品国产拍在线观看| 少妇久久久久久| 欧美成人免费小视频| 性欧美激情精品| 欧美性xxxxxx| 欧美中文字幕在线播放| 欧美自拍大量在线观看| 欧美午夜精品久久久久久浪潮| 久久中文字幕一区| 国产国产精品人在线视| 亚洲毛片在线免费观看| 日韩精品免费观看| 国产日本欧美一区二区三区| 欧美激情18p| 国产精品一区二区三区久久久| 久久国产精品首页| 欧美性资源免费| 91成人福利在线| 欧美日韩精品在线| 亚洲精品99久久久久中文字幕| 精品久久久久久中文字幕大豆网| 成人免费网站在线| 亚洲综合小说区| 日韩欧亚中文在线| 亚洲偷熟乱区亚洲香蕉av| 亚洲天堂网在线观看| 亚洲电影免费观看高清完整版在线| 国产精品亚洲第一区| 国产精品爽爽ⅴa在线观看| 深夜福利国产精品| 国产精品高潮粉嫩av| 91免费的视频在线播放| 国产欧美日韩免费| 国产精自产拍久久久久久| 亚洲欧美日韩视频一区| 日韩欧美在线一区| 欧美一性一乱一交一视频| 激情久久av一区av二区av三区| 91在线观看免费高清| 欧美在线亚洲在线| 亚洲女人天堂视频| 91网在线免费观看| 亚洲国产成人精品电影| 91久久精品在线| 自拍视频国产精品| 亚洲福利在线视频| 欧美综合在线第二页| 宅男66日本亚洲欧美视频| 日韩欧美中文第一页| 欧美在线一区二区三区四| 欧美视频在线看| 亚洲国产日韩欧美在线动漫| 国产精品美女呻吟| 亚洲精品综合精品自拍| 97久久久久久| 91精品国产综合久久久久久久久| 国产精品永久在线| 亚洲国产黄色片| 亚洲一区制服诱惑| 精品动漫一区二区三区| 久久久久久久久久久av| 精品香蕉一区二区三区| 毛片精品免费在线观看| 青青草原一区二区| 成人av色在线观看| 日韩一区二区欧美| 亚洲欧美精品中文字幕在线| 91免费福利视频| 国产精品一区二区三区免费视频| 日韩中文在线中文网在线观看| 日韩最新免费不卡| 777国产偷窥盗摄精品视频| 亚洲精品不卡在线| 亚洲午夜未删减在线观看| 亚洲免费人成在线视频观看| 欧美日韩中文在线| 亚洲欧美日本伦理| 日韩av第一页| 亚洲女人天堂色在线7777| 91人人爽人人爽人人精88v| 亚洲一区中文字幕| 亚洲自拍偷拍色片视频| 97视频在线观看成人| 91精品国产综合久久男男| 亚洲女人天堂av| 成人精品一区二区三区电影免费| 国产欧美精品日韩精品| 中文字幕精品av| 久久精品91久久香蕉加勒比| 国产最新精品视频| 欧美亚洲另类在线| 精品国产一区二区三区在线观看| 国产精品1区2区在线观看| 91精品成人久久| 懂色av一区二区三区| 97成人在线视频| 国产成人在线一区| 国产一区二区三区在线| 蜜月aⅴ免费一区二区三区| 国产精品入口免费视频一| 国产精品xxx视频| 国产丝袜精品第一页| 亚洲成人av在线| 波霸ol色综合久久| 一道本无吗dⅴd在线播放一区| 欧美色另类天堂2015| 欧美成人免费全部观看天天性色| 欧美性生交xxxxx久久久| www.亚洲男人天堂| 国产91精品久久久久久| 久久久久久久网站| 日韩电视剧免费观看网站| 黑人精品xxx一区一二区| 91在线视频导航| 操日韩av在线电影| 欧美在线一级视频| 亚洲美女www午夜| 最好看的2019年中文视频| 成人福利在线视频| 蜜臀久久99精品久久久久久宅男| 国产亚洲精品91在线| 欧美性在线视频| 日韩女优人人人人射在线视频| 日韩电影免费在线观看| 国产精品欧美一区二区| 日韩av中文字幕在线播放| 国产精品免费一区| 在线播放国产一区二区三区| 538国产精品视频一区二区| 992tv成人免费视频| 国模私拍一区二区三区| 日本久久久久久久久| 国产精品丝袜高跟| 日韩中文在线中文网在线观看| 高清一区二区三区四区五区| 亚洲精品第一国产综合精品| 在线观看日韩欧美| 国产精品亚洲视频在线观看| 欧美在线亚洲一区| 日韩欧美在线字幕| 国产精品99一区| 日韩亚洲欧美中文高清在线| 欧美中文字幕在线观看| 在线观看日韩专区| 4438全国亚洲精品在线观看视频| 亚洲免费一在线| 在线视频亚洲欧美| 国产成人精品电影久久久| 久久久久久久国产精品视频| 国产精品偷伦一区二区| 欧美性猛交xxxx免费看漫画| 欧美人在线观看| 欧美在线视频在线播放完整版免费观看| 欧美精品成人在线| 欧美洲成人男女午夜视频| 精品亚洲一区二区三区四区五区| 国产精品成人免费电影| 精品偷拍一区二区三区在线看| 成人激情视频免费在线| 91九色国产社区在线观看| 不卡av在线播放| 中文字幕国产精品| 夜夜嗨av一区二区三区免费区|