簡體   English   中英

宏中的逗號以將參數傳遞給另一個宏函數(#define a,b)

[英]Comma in a macro to pass arguments to a another macro function ( #define a,b )

我正在使用CodeVision對AVR微控制器進行編程。 它是一個C編譯器。

所以這是給我一個錯誤的部分

#defined some_name PORTL,6
SETBIT ( some_name );

錯誤是:宏調用中的參數太少

根據CodeVision對該宏的定義是:可以使用以下宏:

SETBIT(port,b)

            sets bit b of port to logic 1 state.

Example:

/* set bit 5 of I/O Port A output to logic 1 for non-XMEGA chips */
SETBIT(PORTA,5); 

在閱讀了一些有關宏的內容之后,我對它們的理解還遠遠不夠,我注意到他們使用了

#define comma ,

所以我嘗試了這個,我的新錯誤與舊錯誤相同。

我已經閱讀了一些有關宏的文章,但是它們對我來說是高級的。 所以,請您告訴我解決方案是什么。 您還可以告訴我在哪里可以找到一個逐步教我宏的地方,從其他文章中看到的簡單宏到瘋狂硬宏。

很抱歉,如果答案太明顯了,我不知道如何搜索它來解決我面臨的確切問題。

謝謝

您的問題是擴展順序, some_name僅被視為SETBIT唯一參數的一部分

#define SETBIT1(ARG) SETBIT(ARG)

SETBIT1(some_name)

應該管用

您可能會以不同的方式看待它,並因此定義一個宏:

#defined BIT_NAME() SETBIT( PORTL, 6 )

BIT_NAME();

如果需要設置/清除宏,則:

#defined BIT_NAME( b ) (b ? SETBIT( PORTL, 6 ) : CLRBIT( PORTL, 6 ) )

BIT_NAME( 1 );
BIT_NAME( 0 );

暫無
暫無

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

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