簡體   English   中英

檢查定義中的條件語句

[英]Check conditional statement inside a definition

我在使用宏在 c++ 中生成 function 名稱時遇到了問題。 問題是,我在部分代碼中有一個類似於以下幾行的定義:

#define FUNC_GENERATOR(stream_, port_no_)\
static void ISR##port_no_##ROUTINE(void);\
(stream_ == STREAM1) ? (void STREAM1##HANDLER(void) {ISR##port_no_##ROUTINE();} : ((void)(0))\
(stream_ == STREAM2) ? (void STREAM2##HANDLER(void) {ISR##port_no_##ROUTINE();} : ((void)(0))\

好的,我知道它需要解釋,讓我解釋一下我的意思:使用 FUNC_GENERATOR,我想根據 port_no_(端口號)生成一個 ISR 例程,然后決定選擇哪個 stream 以便我可以將此例程放入相應的stream ISR 處理程序。 因此,此定義中的條件語句檢查我是否想為 STREAM1 或 STREAM2 生成 function,如果它是為正確的 STREAMx,則將例程放入其處理程序中,如果不正確,則不執行任何操作。 在我的代碼的其他地方,定義了 STREAM1 和 STREAM2。

正如您已經猜到的那樣,它不起作用。 我使用了很多 forms 的宏,但我無法克服這個問題。 主要問題是如何正確地做到這一點,以便我可以將這種定義與關於我的目標的給定陳述一起使用。

好吧,不可能使用宏來執行這種操作。 還有很多其他方法可以做到這一點,比如使用模板,但我使用宏有一個特殊的原因。 與模板之類的東西相比,它更通用。 此外,我想同時初始化、實例化和定義許多其他對象。 我想我正在尋找一些巨大而困難的東西,但答案就像添加一堆其他定義並創建另一個 function 之類的宏一樣簡單,以便在其相應的處理程序中使用我的 ISR。

謝謝你們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM