首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

天哪,竟然还有这种难以理解的怪事!该如何处理

2012-02-21 
天哪,竟然还有这种难以理解的怪事!我写了一段简单的代码:#defineBUILD_ABC()\voidcall_abc(void)\{\printf

天哪,竟然还有这种难以理解的怪事!
我写了一段简单的代码:

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

热点排行