当前位置:  开发笔记 > 编程语言 > 正文

在函数内部使用时可变未声明的错误

如何解决《在函数内部使用时可变未声明的错误》经验,为你挑选了1个好方法。

当函数fun()定义在main()之上时,变量'a'不能通过预处理器宏解析,但在main()下定义时工作正常.

#include 

void fun()
{
    printf("%d",a);
}

int main()
{
    #define a 5
    fun();
    return 0 ;
} 

它背后的原因是什么?我们如何让它工作,这样我就不必移动函数fun()定义了.



1> usr..:

C预处理器自上而下运行并替换#defines("文本替换").所以,当#define a 5main(),就不能"回头"和替换afunc(); 它只能取代a低于它的's,如果有的话#define.

你只需要在上面定义它func().

从C11草案,6.10.3宏替换:

表单的预处理指令

# define identifier replacement-list new-line

定义一个类似对象的宏,它使宏名称 171)的每个后续实例被构成指令其余部分的预处理标记的替换列表替换.然后重新扫描替换列表以获取更多宏名称,如下所示.

从标准C开始就是这样.来自Dennis Ritchie的C参考手册:

12.1令牌替换表单的编译器控制行

#define identifier token-string

(注意:没有尾随分号)导致预处理器用给定的标记字符串替换标识符的后续实例 (编译器控制行除外).替换标记字符串已从中删除注释,并且它被空白包围.不尝试重新扫描替换字符串.

(强调我的).

推荐阅读
yzh148448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有