#error
#error命令是C/C++語言的預處理命令之一,當預處理器預處理到#error命令時將停止編譯並輸出用戶自定義的錯誤消息。
#define SIZE 3 int main() { #if SIZE>4 && SIZE<36 #error "++++++" #endif } //不符合條件,debug成功
#line處理
1 #include "stdio.h" 2 void Test(); 3 #line 10 "Hello.c" 4 int main(int argc, char* argv[]) 5 { 6 #define CONST_NAME1 "CONST_NAME1" 7 printf("%s/n",CONST_NAME1); 8 #undef CONST_NAME1 9 printf("%s/n",CONST_NAME1); 10 { 11 #define CONST_NAME2 "CONST_NAME2" 12 printf("%s/n",CONST_NAME2); 13 } 14 printf("%s/n",CONST_NAME2); 15 return 0; 16 } 17 void Test() 18 { 19 printf("%s/n",CONST_NAME2); 20 }
提示如下的編譯信息:
Hello.c(15) : error C2065: 'CONST_NAME1' : undeclared identifier
表示當前文件的名稱被認為是Hello.c, #line 10 "Hello.c"所在的下一行被認為是第10行,因此提示第15行出錯。
#pragma預處理
#pragma once
一般用於頭文件開始,預編譯時,只插入一次此頭文件。
例如 頭文件 "grandfather.h"
當這段程序多次被include ( 多文件編譯,相互include時會遇到),只插入和編譯一次。
#pragma once 的編譯速度 比 #ifndef GRANDFATHER_H #define GRANDFATHER_H ..快,
所以往往 全用。
與#ifndef #define的區別可見:http://www.cppblog.com/cxiaojia/archive/2013/03/18/198526.html
#pragma comment
#pragma comment(...)
該指令將一個注釋記錄放入一個對象文件或可執行文件中。
常用於鏈接一個動態庫,如
#pragma comment(lib, "user32.lib");
也有linker:將一個鏈接選項放入目標文件中,你可以使用這個指令來代替由命令行傳入的或者在開發環境中設置的鏈接選項來強制包含某個對象,例如:
#pragma comment(linker, "/include:_mySymbol")
#pragma code_seg
1 void func1() { // 默認存儲在代碼段.text中 2 } 3 4 #pragma code_seg(".my_data1") 5 6 void func2() { // 存儲在代碼段.my_data1中 7 } 8 9 #pragma code_seg(push, r1, ".my_data2") 10 11 void func3() { // 存儲在代碼段.my_data2中 12 } 13 14 #pragma code_seg(pop, r1) 15 16 void func4() { // 存儲在代碼段.my_data1中 17 }
它能夠設置程序中函數代碼存放的代碼段,當我們開發驅動程序的時候就會使用到它。
#pragma hdrstop
#pragma hdrstop 表示預編譯頭文件到此為止,後面的頭文件不進行預編譯。 BCB 可以預編譯頭文件以加快鏈接的速度,但如果所有頭文件都進行預編譯又可能占太多磁盤空間,所以使用這個選項排除一些頭文件。
#pragma warning
#pragma warning( disable : 4507 34; once : 4385; error : 164 )
等價於:
#pragma warning(disable:4507 34) // 不顯示 4507 和 34 號警告信息
#pragma warning(once:4385) // 4385 號警告信息僅報告一次
#pragma warning(error:164) // 把 164 號警告信息作為一個錯誤。
同時這個 pragma warning 也支持如下格式:
#pragma warning( push [ ,n ] )
#pragma warning( pop )
這裡 n 代表一個警告等級(1---4)。
#pragma warning( push )保存所有警告信息的現有的警告狀態。
#pragma warning( push, n)保存所有警告信息的現有的警告狀態,並且把全局警告
等級設定為 n。
#pragma warning( pop )向棧中彈出最後一個警告信息,在入棧和出棧之間所作的
一切改動取消。例如:
#pragma warning( push )
#pragma warning( disable : 4705 )
#pragma warning( disable : 4706 )
#pragma warning( disable : 4707 )
//.......
#pragma warning( pop )
在這段代碼的最後,重新保存所有的警告信息(包括 4705, 4706 和 4707)。