在 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;

在全局范围内。