/* ============================================================================ Name : TestVariable.c Author : lf Version : Copyright : Your copyright notice Description : 局部变量与全局变量在声明时的注意事项 全局变量只能要常量赋值,但是局部变量可用常量和表达式以及函数赋值. 这是为什么呢? 程序在开始执行时需要用适当的值来初始化全局变量,所以初始值必须保存在 编译生成的可执行文件,所以初始值在编译的时候就需要计算出来. 所以如果这么初始化全局变量:double pi2=acos(-1.0);需要在程序运行时 调用acos函数才能计算出对应的结果. 在这里主要是要区分编译时和运行时的两个阶段. 为简化编译器C语言规定:全局变量只能用常量表达式来定义. 否则报错:initializer element is not a constant expression 如果定义全局的变量: int minute=480; int hour=minute/60; 也会报同样的错误. 这是因为虽然在编译时计算出hour的值是可能的, 但是minute/60不是常量表达式同样不满足语法规范. ============================================================================ */ #include <stdio.h> #include <stdlib.h> #include <math.h> double pi1=3.14159; //错误的,提示如下: //initializer element is not a constant expression //double pi2=acos(-1.0); //int hour=minute/60是错误的,提示如下: //initializer element is not a constant expression //int minute=480; //int hour=minute/60; int main(void) { printf("pi1=%f\n",pi1); //printf("pi2=%f\n",pi2); double pi3=acos(-1.0); printf("pi3=%f\n",pi3); //printf("minute=%d\n",minute); //printf("hour=%d\n",hour); return EXIT_SUCCESS; }