在C中,如果我们在json_encode(
array_values(
array_intersect_key($result,
array_flip(array_rand($result, 5)))));
内重新声明变量,那么编译器会给出一个错误“'我'重新声明为不同类型的符号”。好的。
enum
但是,在C ++中,如果我们在枚举中重新声明变量,那么它的工作正常。
#include <stdio.h>
int i = 10;
struct S
{
enum
{
i = 20
}e;
};
int main()
{
printf("%d\n", i);
}
我不明白,为什么C ++编译器没有给重新声明变量带来错误?
答案 0 :(得分:10)
它没有给出重新声明错误,因为枚举器被引入类范围。回想一下,结构和类在C ++中大多可以互换。 S
的范围包含枚举器i
。
但是在C中,struct S
没有定义范围。 C中只有4种类型的范围:函数,文件,块和函数原型。因此,i
被引入到已定义变量i
的文件范围中。