天哪,竟然还有这种难以理解的怪事!
我写了一段简单的代码:
#define BUILD_ABC() \
void call_abc(void) \
{\
printf( "cccc ");\
}
void main()
{
BUILD_ABC();
}
竟然编译不过去,提示local function definitions are illegal,我在
void call_abc(void); \
之后加了一个分号,就可以正确编译并且正确执行。但是我想不通的就是为什么要加个;号才可以编译通过?因为加了分号之后, BUILD_ABC()宏展开就成了:
void call_abc(void) ;
{
printf( "cccc ");
}
这算是怎么回事啊,又不是函数体也不算是函数生命啊?按道理讲应该不加;号才对啊,真是搞不懂,哪位高人指点一下吧
[解决办法]
在函数内定义函数是不允许的。
[解决办法]
不能嵌套定義吧
加上分號 就只是聲明call_abc函數
然後一個前套語句 那是正常的
你一定要通過函數調用萊的話
可以把
BUILD_ABC();放在main前面
main裏面寫
call_abc();
[解决办法]
不加分号,BUILD_ABC()宏展开就成了:
void main()
{
void call_abc(void)
{
printf( "cccc ");
}
}
函数内包含函数定义,不合语法
加分号展开后void call_abc(void);成了一个变量声明语句,合法了.
[解决办法]
你的程序相当于:
void main()
{
void call_abc(void) ; // <-这是一条函数声明,相当于变量定义
{ //从本行开始是main()的程序体,不是call_abc的
printf( "cccc ");
}
}
如果没有那个分号,则是在main() 内又定义了一个call_abc函数,函数不能嵌套定义,当然是不行拉
[解决办法]
如果不加分号
void main()
{
BUILD_ABC();
}
就相当于
void main()
{
void call_abc(void)
{
printf( "cccc ");
}
;//空语句
}
这样代一定不能通过了,不可以在函数中定义函数的
加上了;就相当于
void main()
{
void call_abc(void); //只是声明call_abc这个函数,和下面块语句没有什么关系
{ //这是一个块语句
printf( "cccc ");
}
;//空语句
}
知道你想干么,这样定义就OK了
#define BUILD_ABC() call_abc()
void call_abc(void)
{\
printf( "cccc ");\
}
void main()
{
BUILD_ABC();
}