以下两个static变量声明是否相同?
1.
static int var1;
static int var2;
static int var3;
Run Code Online (Sandbox Code Playgroud)
2.
static int var1, var2, var3;
Run Code Online (Sandbox Code Playgroud)
更具体地说,在案例2中,所有变量都是static,或者只是var1?
是否const通过constC标准允许的声明访问非对象?例如,以下代码保证在符合标准的平台上编译和输出23和42?
翻译单位A:
int a = 23;
void foo(void) { a = 42; }
Run Code Online (Sandbox Code Playgroud)
翻译单位B:
#include <stdio.h>
extern volatile const int a;
void foo(void);
int main(void) {
printf("%i\n", a);
foo();
printf("%i\n", a);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在ISO/IEC 9899:1999中,我刚刚发现(6.7.3,第5段):
如果尝试通过使用具有非const限定类型的左值来修改使用const限定类型定义的对象,则行为是未定义的.
但在上面的例子中,对象没有定义为const(但只是声明).
UPDATE
我终于在ISO/IEC 9899:1999中找到了它.
6.2.7,2
引用同一对象或函数的所有声明都应具有兼容类型; 否则,行为未定义.
6.7.3,9
要使两种合格类型兼容,两者都应具有相同类型的兼容类型; [...]
所以,它是未定义的行为.
6.7.6声明者说
每个声明符声明一个标识符,并声明当与表达式中出现的声明符形式相同的操作数出现在表达式中时,它指定一个函数或对象,其范围,存储持续时间和声明说明符指示的类型.
并且还说明了参数的语法:
parameter-declaration:
declaration-specifiers declarator
declaration-specifiers abstract-declarator(opt)
Run Code Online (Sandbox Code Playgroud)
对于给定的函数原型
int f( int a[], int n);
Run Code Online (Sandbox Code Playgroud)
int a[]使用声明a[]符声明一个参数,声明一个标识符a.
如果是的话
int f( int [], int n);
Run Code Online (Sandbox Code Playgroud)
int []declares参数是一个int数组,没有标识符.
是否[]也说明符?(我认为不是因为它没有声明标识符,但参数的语法表明它是!)