在C中重新声明typedef

我正在阅读Brian W. Kernighan和Dennis M. Ritchie的著作《 C编程语言》

在A.8.9节中,这些书说:

可以在内部范围内重新声明Typedef名称,但是必须提供一组非空的类型说明符。例如,extern Blockno;不重新声明Blockno,而是重新声明extern int Blockno;

我感觉自己理解了,extern Blockno;但这是什么意思extern int Blockno;呢?

当我尝试这样做时,出现编译错误,但我仍然不明白这本书的含义!

来自莫斯科的弗拉德

他的意思是可以重新声明typedef名称。例如,如果重新声明发生在内部范围内,则它可以是变量名。

他指出,这样的变量声明

extern Blockno;

是不正确的。变量应具有类型说明符,该类型说明符是声明应指定所声明的实体具有哪种类型。早期将类型int用作默认类型。

因此,正确地编写以声明类型为int的对象是正确的,例如

extern int Blockno;

也就是说,此声明在本地范围内引入了Blocknoint类型的变量存储类说明符意味着此声明引用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;

隐藏Int在外部作用域中声明的typedef名称,并引用该声明

int Int = 10;

在全球范围内。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在C ++中重新声明数组

来自分类Dev

在C ++中重新声明数组

来自分类Dev

在C ++中重新声明变量会花费什么吗?

来自分类Dev

在C中循环中重新声明VLA数组

来自分类Dev

在C中循环中重新声明数组

来自分类Dev

C函数中的传递和重新声明指针

来自分类Dev

在 C 文件中重新声明不透明的结构

来自分类Dev

Swift中无效的函数重新声明

来自分类Dev

在Paintcode中无效的“ StyleKitSettableImage”的重新声明

来自分类Dev

不在php中重新声明变量

来自分类Dev

在 Typescript 中重新声明解构变量

来自分类Dev

重新声明错误

来自分类Dev

在C程序中重新声明为另一种符号

来自分类Dev

转到:在此块中重新声明了“实例”

来自分类Dev

为什么必须在子类中重新声明PoolDictionaries?

来自分类Dev

在Java中的循环内部重新声明变量

来自分类Dev

如何在子类中重新声明父方法?

来自分类Dev

在类扩展中重新声明只读属性

来自分类Dev

FuelPHP中的“无法重新声明类”问题

来自分类Dev

为什么必须在子类中重新声明PoolDictionaries?

来自分类Dev

在每个定期运行中重新声明Python“常量”

来自分类Dev

在发布版本中重新声明 rawValue 无效

来自分类Dev

C ++:函数重新声明是未定义的行为吗?

来自分类Dev

类外部的C ++静态constexpr成员重新声明

来自分类Dev

C ++:函数重新声明是未定义的行为吗?

来自分类Dev

c ++ 11 enable_if错误-模板参数重新声明

来自分类Dev

在 for 循环中重新声明对象 - C++

来自分类Dev

嵌套循环中的 C++ 变量重新声明

来自分类Dev

创建一个typedef从外部作用域重新声明模板参数的负面影响?