gpt4 book ai didi

c - 为什么 "volatile"只要求数组声明定义一致性?

转载 作者:太空狗 更新时间:2023-10-29 15:26:33 25 4
gpt4 key购买 nike

鉴于声明:

extern foo bar;

并且,在另一个文件中,定义:

volatile foo bar = ...

我收到定义和声明不兼容的错误,如果我将 volatile 添加到声明或从定义中删除它,该错误就会消失。

但这仅当 foo 是数组类型时,标量类型可以很好地处理不一致问题。

我在三种不同的编译器中尝试过。有人知道这是什么原因吗?

最佳答案

标量或数组的不匹配限定符(constvolatilerestrict)应该是 undefined behavior .

引用同一对象的声明应该具有兼容的类型,否则我们会有未定义的行为,我们可以从 draft C99 standard 中看到这一点6.2.7 兼容类型和复合类型

All declarations that refer to the same object or function shall have compatible type; otherwise, the behavior is undefined.

并且我们可以看到定义也是来自 6.7 Declarations 的声明:

A definition of an identifier is a declaration for that identifier that

而我们从6.7.3 Type qualifiers可以看出,这意味着类型限定符必须匹配:

For two qualified types to be compatible, both shall have the identically qualified version of a compatible type; the order of type qualifiers within a list of specifiers or qualifiers does not affect the specified type.

关于c - 为什么 "volatile"只要求数组声明定义一致性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25647250/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com