当前位置: 首页 > 知识库问答 >
问题:

“无效”“对象”的非定义声明:C标准的哪一部分禁止它们?还是真的?

顾乐家
2023-03-14

在C标准中至少有两个地方禁止定义类型不完整的对象(http://eel.is/c草稿/基本。定义5,http://eel.is/c草稿/基本。类型#5)。但是,在C中,通常允许为不完整类型的对象提供非定义声明。而且我似乎无法指出禁止以那种方式声明void类型的不完整“对象”的具体部分。(例如,void不是C中的对象类型,但引用类型也不是。)那么,这是吗

extern void a;

C语言格式真的很糟糕?

在C代码中,允许为void对象(如上所示)提供非定义声明,GCC和Clang都接受上述C代码(当然,不允许定义)。但在C代码中,这两个编译器都会为此类声明发出错误。标准的哪一部分要求他们这样做?

[basic.fundamental]列出了space类型(http://eel.is/c草稿/basic.types#basic.fundamental-13)的可能用法,但它似乎不是一个完整的列表。

共有1个答案

孟均
2023-03-14

我相信有关的段落如下:

[dcl.stc]

5extern说明符仅适用于变量或函数的声明。

[基本]

6变量是通过声明非静态数据成员或对象以外的引用引入的。变量的名称(如果有)表示引用或对象。

[基本类型]

8对象类型是一种(可能是cv限定的)类型,它不是函数类型,不是引用类型,也不是cv void。

一个,作为一个变量声明,必须表示一个引用或一个对象,根据[基本]。它涵盖了确实不是对象类型的引用。但是,由于space既不是引用也不是对象类型,因此声明格式不佳。

 类似资料:
  • 问题内容: 以下代码段是否会降低性能? 还是这段代码实际上更有意义? 如果在字节码中这两个完全相等,那么显然第一种方法在样式方面看起来更好,但我想确保确实如此。 问题答案: 在当今的编译器中,没有。我在最小范围内声明对象,因为对于下一个家伙而言,它更具可读性。

  • 本文向大家介绍C#标准活动声明,包括了C#标准活动声明的使用技巧和注意事项,需要的朋友参考一下 示例 事件声明: 事件处理程序声明: 订阅活动: 动态地: 通过设计师: 单击控件的属性窗口上的“事件”按钮(闪电) 双击事件名称: Visual Studio将生成事件代码: 调用方法:            

  • 原始关闭原因未解决 我见过以下案例: 为什么会出现这种差异?

  • 我正在用C写这个链表程序 我测试程序时发现了错误 linkedlist。cpp:5:24:错误:隐式声明的“constexpr LinkedList::LinkedList()”LinkedList::LinkedList()的定义{ 这是密码 Linkedlist. h文件: linkedlist。cpp文件: 请帮忙。

  • 干杯和hth。-Alf在回答中评论说,与C 98相比,值初始化可以说是C 03的一个新特性。我不知道他是什么意思。 值初始化是C 98的一部分吗?它存在于概念中而不是名称中?为什么它被添加到C 03标准中? 我有一份03标准的副本,但没有98标准。这是默认初始化和值初始化的定义。 默认初始化T类型的对象意味着: -如果T是非POD类类型(第9条),则调用T的默认构造函数(如果T没有可访问的默认构造

  • 问题内容: 注意 :我已经搜索了很多,例如UITableViewDataSource方法的无效重新声明?不适用于我的情况。因为我的代码中没有重复的文件或类。 我的项目中只有一个AppDelegate.swift文件,文件中只有一个类。但是我有 我在AppDelegate.swift文件中也有以下代码。我得到以下错误。 注意 ,我在项目中使用了重复的类或变量声明,并且代码中只有一次声明。 问题答案:

  • 问题内容: 这是我的PHP sql语句,在var dump时返回false 问题答案: 有时您的PDO代码会产生类似或类似的错误。甚至没有任何错误,但查询不能完全一样。这意味着您的查询无法执行。 每次查询失败,MySQL都会显示一条错误消息, 说明原因 。不幸的是,默认情况下,此类错误不会转移到PHP,并且您所拥有的只是上面提到的无提示或神秘的错误消息。因此,配置PHP和PDO报告MySQL错误非

  • 推特上有这样一条推文: 在JavaScript中,所有对象都是真实的(根据规范)。在DOM中,这条规则有一个例外。它是什么?#jsquiz#Fronttrends 有人知道答案吗?