【发布时间】:2018-01-05 02:44:33
【问题描述】:
忽略我为什么要这样做,只是想了解这里发生了什么: 此代码编译:
#include <stdio.h>
typedef char byte;
int main (void)
{
byte var_byte;
int byte = 10;
printf("\n Test program: %d\n", byte);
}
但是,如果我更改变量声明的顺序,它就不会编译。
这不会编译:
#include <stdio.h>
typedef char byte;
int main (void)
{
int byte = 10;
byte var_byte;
printf("\n Test program: %d\n", byte);
}
编译器错误:
b.c:7:8: error: expected ‘;’ before ‘var_byte’
byte var_byte;
^~~~~~~~
有人能解释一下为什么顺序很重要吗?
【问题讨论】:
-
不编译出现什么错误?
-
而在第二个中,你创建一个与类型同名的变量,然后尝试使用它下面的类型。您可能正在使用变量名隐藏 typedef。
-
您可能会注意到:
int main (void) { typedef char byte; byte var_byte; int byte = 10; printf("\n Test program: %d\n", byte); }无法编译,因为类型名称byte不能在main()的范围内更改 - 它只能在内部范围内更改。 -
已经多次声明,将相同的名称用于变量名称的 typedef 名称是非常糟糕的编程习惯。通常,编译器可以区分差异,但并非总是如此。 OP 找到了“并非总是”实例之一
标签: c variables scope declaration typedef