通读ANSI C Yacc语法规范后,我注意到以下内容都是有效的:
register x;
auto y;
static z;
extern q;
这对我来说似乎很奇怪,因为我对类型的理解表明这些变量都没有类型。这些是什么意思?如何检查它们的类型?分配了多少内存?
在C99之前,如果未指定类型,则默认为int,这应该在C99中删除,但许多编译器甚至在C99模式下也支持它。例如,在叮当声中,即使使用std=c99,我也只收到以下与错误相反的警告:
warning: type specifier missing, defaults to 'int' [-Wimplicit-int]
register x;
~~~~~~~~ ^
warning: type specifier missing, defaults to 'int' [-Wimplicit-int]
auto y;
~~~~ ^
warning: type specifier missing, defaults to 'int' [-Wimplicit-int]
static z;
~~~~~~ ^
warning: type specifier missing, defaults to 'int' [-Wimplicit-int]
extern q;
~~~~~~ ^
在这种情况下,gcc
也只提供警告,尽管使用-pedantic errors标志会导致gcc
产生错误,这通常是扩展在gcc中的情况,通常是扩展到的情况,而不是在这种情况下。
如果我们看看C99标准草案,前进一节会说:
[.]与上一版相比的主要变化包括:
并包括以下项目符号:
-删除隐式int
更新
来自国际标准的基本原理-编程语言-C部分6.7.2
类型说明符:
C99的新特性:在C89中,可以从声明中的声明说明符中省略所有类型说明符。在这种情况下,暗示int。委员会决定,该功能的固有危险大于其方便性,因此将其删除。其效果是保证生成一个诊断,该诊断将捕获额外类别的编程错误。发出诊断后,实现可以选择假设隐式int并继续翻译程序,以支持利用此功能的现有源代码。
您使用的语法确实早于C99,但据我所知,更新以反映C11的新版本在声明中的类型说明符方面没有太大差异。因此,在这种情况下,语法不足以强制执行此约束。您必须转到标准部分6.7.2
类型说明符并看到它说:
在每个声明的声明说明符中,以及在每个结构声明和类型名称的说明符限定符列表中,应至少给出一个类型说明符。
问题内容: 我在Go中找到了符文类型,并有一个简单的问题,但值得一提。 我发现它是int32的别名,目的是区分数字和字符值。 http://golang.org/pkg/builtin/#rune 但是我对“符文”一词感到困惑,实际上它代表什么?例如uint == unsigned int 问题答案: 但是我对“符文”一词感到困惑,实际上它代表什么?例如uint == unsigned int 符
问题内容: 为什么我们不能对Java类的方法内部声明的变量使用访问说明符? 问题答案: 因为这没有意义。方法中声明的变量是该方法的局部变量。即它们不能在方法之外访问。修改变量的声明将实现什么?
类说明 管理类 Dongtu 版本信息 public static final String VERSION 传入APP_ID和APP_SECRET进行初始化 public static void configure(Context context, String appId, String appSecret) 传入用户信息,包括唯一标识userId、昵称userName、性别gender、
类说明 模型类 DTGif 说明: 动图模型类 /** 图片id */ @property (nonatomic, strong) NSString *imageId; /** 图片名称 */ @property (nonatomic, strong) NSString *text; /** 图片缩略图地址 */ @property (nonatomic, strong) NSString *
类和开放接口 管理类 DongtuStore Android SDK核心文件 注册appId和appSecret,初始化配置,建议在Application.onCreate()中调用。 public static void initConfig(Context context, String appId, String appSecret) 传入用户信息。 public static void