繁体   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