在 C 中重新声明一个 typedef
Redeclare a typedef in C
我正在阅读 Brian W. Kernighan 和 Dennis M. Ritchie 合着的 The C programming Language 一书。
在 A.8.9 部分,书籍说:
Typedef names may be redeclared in an inner scope, but a non-empty set of type specifiers must be
given. For example, extern Blockno;
does not redeclare Blockno, but extern int Blockno;
does.
我觉得我理解 extern Blockno;
但 extern int Blockno;
是什么意思?
当我尝试这样做时出现编译错误,我仍然不明白这本书的意思!
他的意思是可以重新声明一个typedef名称。例如,它可以是一个变量名,前提是重新声明发生在内部范围内。
他指出这样声明一个变量
extern Blockno;
不正确。变量应该有一个类型说明符,即声明应该指定声明的实体具有哪种类型。早期使用 int 类型作为默认类型。
所以像
这样声明一个int类型的对象应该是正确的写法
extern int Blockno;
即此声明在局部范围内引入了 int 类型的变量 Blockno
。存储 class 说明符表示此声明引用已定义的对象 Blockno
,具有外部或内部链接。
考虑以下演示程序
#include <stdio.h>
int Int = 10;
int main(void)
{
typedef int Int;
{
extern int Int;
printf( "Int = %d\n", Int );
}
return 0;
}
它的输出是
Int = 10
块范围内的声明
extern int Int;
隐藏在外部作用域中声明的typedef名称Int
并引用声明
int Int = 10;
在全局范围内。
我正在阅读 Brian W. Kernighan 和 Dennis M. Ritchie 合着的 The C programming Language 一书。
在 A.8.9 部分,书籍说:
Typedef names may be redeclared in an inner scope, but a non-empty set of type specifiers must be given. For example,
extern Blockno;
does not redeclare Blockno, butextern int Blockno;
does.
我觉得我理解 extern Blockno;
但 extern int Blockno;
是什么意思?
当我尝试这样做时出现编译错误,我仍然不明白这本书的意思!
他的意思是可以重新声明一个typedef名称。例如,它可以是一个变量名,前提是重新声明发生在内部范围内。
他指出这样声明一个变量
extern Blockno;
不正确。变量应该有一个类型说明符,即声明应该指定声明的实体具有哪种类型。早期使用 int 类型作为默认类型。
所以像
这样声明一个int类型的对象应该是正确的写法extern int Blockno;
即此声明在局部范围内引入了 int 类型的变量 Blockno
。存储 class 说明符表示此声明引用已定义的对象 Blockno
,具有外部或内部链接。
考虑以下演示程序
#include <stdio.h>
int Int = 10;
int main(void)
{
typedef int Int;
{
extern int Int;
printf( "Int = %d\n", Int );
}
return 0;
}
它的输出是
Int = 10
块范围内的声明
extern int Int;
隐藏在外部作用域中声明的typedef名称Int
并引用声明
int Int = 10;
在全局范围内。