逗号在宏中将参数传递给另一个宏函数(#define a,b)

时间:2014-05-31 05:29:24

标签: c function macros arguments

我正在使用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 ,

所以我尝试了这个,我的新错误与旧错误相同。

我已经阅读了一些关于宏的帖子,但是我们要提前了解。那么请你告诉我解决方案是什么。你能不能告诉我在哪里可以找到一个地方,一步一步地教我宏,从简单的那些到我在其他帖子中看到的疯狂的那些。

对不起,如果答案太明显了,我不知道如何搜索它以获得我所面对的确切问题。

谢谢

2 个答案:

答案 0 :(得分:3)

您的问题是扩展的顺序,some_name仅被视为SETBIT

的唯一参数的一部分
#define SETBIT1(ARG) SETBIT(ARG)

SETBIT1(some_name)

应该有效

答案 1 :(得分:1)

您可能会以不同的方式看待它并定义一个宏:

#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 );