我對C++比較陌生,我正在上一個類。我們的班級被分配了一個實驗室,我的老師說實驗室的寫作有點難以理解;但是,他沒有對實驗室報告做任何修改。所以,我遇到了實驗室的這一部分:定義一個預處理器宏
定義一個預處理宏
長期以來的慣例大寫宏名,而這個宏的名稱必須是TRACE_FUNC。該宏具有單個參數,當您將該宏應用於代碼時,該符號將被函數名稱替換。宏觀的開始是這樣的:
#define TRACE_FUNC(symbol) replacement-text`
和預處理器將無處不在替換替換文本的TRACE_FUNC(符號)字符串中的源代碼存在,並且喂符號設置成替代品。
注意:#define語句必須全部在單個邏輯行上。爲了保持長度的可管理性,可以在行尾加一個反斜槓來轉義換行符;這將使預處理器保持高興,同時允許跨多行跨越定義。
對於本練習,替換文本必須是完整的語句,包括終止分號。
替換文本必須是一個輸出語句,該語句將打印符號,後跟調用的文本()。和標準輸出的換行符。您可以從warning.cpp源文件複製和修改其中一個輸出語句。
warning.cpp
只是一個我們正在使用的文件,而TRACE_FUNC
被放置在一個頭文件中。
所以,我讀了幾次,我不是100%確定它在問什麼。從一種方式看,它似乎要求我創建一個名爲TRACE_FUNC的宏。如果以另一種方式來看,它會要求我使用宏TRACE_FUNC。所有這一切都很好,但我不知道如何使用TRACE_FUNC,我無法在任何地方找到任何文檔,也不知道如何創建宏。當我尋求幫助時,我的老師只是說。而不是那些非常有用的,因爲它是一個非常曲折,混亂的答案,沒有解釋TRACE_FUNC究竟是什麼。
基本上,我老師所說的全部內容都是TRACE_FUNC
內的符號需要是源代碼中某個函數的名稱。舉個例子,假設我們在警告中有一個函數foo()
,那麼從他的解釋中,符號應該是foo()
(或者foo,我也不確定)。另外,在替換文本中,如果我將#
放在符號的前面,顯然名稱本身將被替換。我認爲應該表示預處理器指令。爲什麼我應該在這裏使用它?
無論如何,做我的老師所說的幾乎沒有做什麼。這也不行
#define TRACE_FUNC(foo()) #foo() called. ;
也不該行
#define TRACE_FUNC(foo) #foo() called. ;
更換任何文字,我敢肯定是#define指令的操作。所以我必須以錯誤的方式來應用我的老師所說的話,但我不知道爲什麼這是錯誤的或者如何解決它。
所以,我的問題。 TRACE_FUNC
實際上是一個宏,如果是的話,是否有任何文檔可以閱讀?或者我應該創建TRACE_FUNC
,如果是的話,我應該怎麼做?
謝謝!這比我的老師說的要清楚得多。 – FoolishOrpheus
另請參閱http://stackoverflow.com/a/257425/1689451關於如何定義函數宏。 –