c - 由唯一类型限定符组成的声明说明符
问题描述
long
、signed long
、long int
或signed long int
都指定相同的类型是明确定义的。实际上,N2310/6.7.2(p5)
:
每个逗号分隔的多重集都指定相同的类型,除了位域,说明符 int 指定与 相同的类型
signed int
还是与 . 相同的类型是实现定义的unsigned int
。
据我所知,int
可以简单地省略。现在考虑声明:
const a;
GCC
警告说
warning: type defaults to ‘int’ in declaration of ‘a’
语法允许这样的声明,因为declarator
here 是一个标识符a
, thedeclaration-specifiers
是一个类型限定符const
。N2310/6.7(p1)
:
declaration:
declaration-specifiers init-declarator-list opt ;
[...]
declaration-specifiers:
[...]
type-qualifier declaration-specifiers opt
[...]
但是通过标准部分6.7
和6.7.3
(甚至没有这样的例子)我无法证明这样的声明实际上隐含地声明了a
to的类型const int
。
根据标准a
,声明中应该有什么类型?const a;
解决方案
6.7.2p2:
在每个声明的声明说明符中,以及每个结构声明和类型名称的说明符-限定符列表中,至少应给出一个类型说明符。
const a;
是无效的。
C89/C90 过去int
在这些情况下默认为,这就是编译器仍然支持它的原因,但“隐式 int”在 C99 中被正式删除。
ISO 9899:1990 在6.5.2 类型说明符下有以下条目:
int
,signed
,signed int
, 或没有类型说明符
推荐阅读
- reactjs - 将反应表对齐到页面中心
- ansible - 从列表中为 Ansible 中的每个哈希条目生成哈希列表
- php - Laravel 子域路由 URL
- laravel - 如何修复 git 与 npm 自动生成文件的冲突?
- flutter - 如何将 sqlite 与 AndroidAlarm Manager 依赖项一起使用?
- haskell - 在 Aeson 解析器中提取和合并对象值
- flutter - Flutter:使用 FAB 的 BottomAppBar 导航
- python - 在玩具示例中实现 python 装饰器
- ffmpeg - FFMPEG,.ts 输出中的 PCR/PTS/DTS 问题
- json - 在请求标头 C++ 构建器中发送不记名 + 令牌?