我在函数中定义了宏。我在main函数中使用了这个宏,它工作正常。
宏还有全局范围?
#include <stdio.h>
void f()
{
#define SQUARE no*no
}
void main()
{
int no;
printf("Enter no");
scanf("%d",&no);
printf("Square of no = %d",SQUARE);
}
答案 0 :(得分:3)
看起来他们有全局范围文件范围(这就是你说全局范围时的意思)但宏没有范围,因为他们在语义分析之前的预处理期间被替换。如果我们转到draft C99 standard,则会在6.2.1
标识符范围中说明以下内容:
[...]此处不再考虑宏名称和宏参数, 因为在程序翻译的语义阶段之前 源文件中出现的宏名称被替换为 预处理构成其宏定义的令牌序列。
答案 1 :(得分:0)
什么阻止你自己尝试?
答案是肯定的。它具有全局范围。
答案 2 :(得分:0)
在C语言中,宏在翻译的早期阶段进行处理。在那个阶段,范围的语言级概念尚不适用。处理宏时不考虑任何范围。
请注意,C语言没有&#34;全局范围&#34;等范围。 C语言仅定义文件范围,功能范围,块范围和函数原型范围。就是这样。没有&#34;全球&#34;范围。
处理范围(6.2.1)的语言规范部分明确说明
此处不再考虑宏名称和宏参数, 因为在程序翻译的语义阶段之前 源文件中出现的宏名称被替换为 预处理构成其宏定义的令牌序列。
这意味着范围的概念不适用于宏。