打开头文件 <limits.h> 可以看到字符和各种整数类型的特点。
打开头文件 <float.h> 可以看到定义。
许多编译器会报警告。 当 long 整形变量的值在 short 范围内,变量值不变,当 long 整形变量的值超过 short 时,我测试的是去掉高位,只保留低 8 位的数据赋给 short 整形变量。
不行
char 类型在正常情况下是 unsigned。
没有区别,位于函数起始部分的变量属于自动变量,在声明变量的同时进行初始化和先声明后赋值只有风格之差。
左边和之前一样,右边会出错,constant 变量不能进行赋值。
对,除非代码块中有嵌套的代码块声明了相同名字的变量。
错,自动整型变量作用域在当前代码块中。
不会,在代码块中变量声明为 static 只会改变它的存储类型,不会改变作用域和链接属性。
不需要
不会,链接属性从 external 变为 internal ,但是同一个源文件中还是可以访问。
不需要,缺省链接属性为 external。
会,声明中包含 static 链接属性变为 internal,其他源文件不能进行访问。
出现在代码块内部时:
a 为局部变量,存储类型为 automatic,每次函数调用时进行初始化,作用域为当前代码块,无链接属性。
出现在代码块外部时:
a 为全局变量,存储类型为 static,程序运行前初始化一次,作用域为当前文件,external 链接属性。
有点让人困惑的是变量 a,external 链接属性肯定在代码块外面,但是作用域 x 可以访问而 y 不可以,小技巧是把函数 y 放在变量 a 的声明之前。
不过变量 b 链接属性为 none 而函数 x、y 都可以访问,这里应该是题目有问题,变量 b 的链接属性应该是 internal。
static char b = 2;
void y(){}
int a = 1;
void x()
{
int c = 3;
static float d = 4;
}
错误:第 6 行变量 c 的声明和函数形参中的 c 冲突。下面的比较琐碎。