C++primer第五版 NDEBUG預處理變數,輸出vector內容,有條件地輸出指向過程有關的資訊。
阿新 • • 發佈:2018-12-18
除錯程式碼時,有時會用到一種類似於標頭檔案保護的技術,這就要用到兩項預處理功能:assert和NDEBUG。
前處理器定義了幾個對於程式除錯很有用的名字:
__FILE__ 存放檔名的字串字面值
__LINE__ 存放當前行號的整型字面值
__TIME__ 存放檔案編譯時間的字串字面值
__DATE__ 存放檔案編譯日期的字串字面值
另外還有__func__.輸出當前除錯的函式的名字,不過這是C++11新增的,有些老編譯器不支援。
可以使用這些常量在錯誤訊息中提供更多資訊。
// primer_6_5_3.cpp : Defines the entry point for the application. // NDEBUG預處理變數 // 輸出vector內容,有條件地輸出指向過程有關的資訊。 #include "stdafx.h" #include<iostream> #include<vector> #include<string> using namespace std; int main() { string word; vector<string> vec; //宣告一個存放string物件的容器vec void display_word(vector<string>,const int); //宣告顯示單詞的函式 cout << "input the words: ('q' to over )" << endl; cin >> word; while(word!="q") //往vec容器內新增元素 { vec.push_back(word); cin >> word; } display_word(vec,5); //呼叫函式 system("pause"); return 0; } void display_word(vector<string> myword,const int threshold) //定義函式,第一個引數為容器名,第二個引數為閾值 { for(int i=0;i<myword.size();i++) //遍歷容器類各個物件 { if(myword[i].size() < threshold) //如果單詞長度小於閾值 cerr << "Error: " << endl //輸出以下錯誤資訊 << __FILE__ << endl << "at line " << __LINE__ << endl << "compiled on " << __DATE__ << "at " << __TIME__ << endl << "Word read was \" " << myword[i] << " \": Length too short" << endl; else cout << myword[i] << endl; //否則輸出單詞 } }
該程式首先定義了一個vector物件vec,然後由使用者自主輸入一些單詞,輸入完成以q結束。再呼叫自定義函式對輸入的單詞進行處理,為函式傳入容器物件和長度閾值,函式體做以下處理:將長度小於5的單詞作為輸入不符合要求的單詞,輸出錯誤資訊,長度大於等於5的單詞正常打印出來。
效果如下: