您的位置:首页 > 其它

局部变量与全局变量在声明时的注意事项

2015-02-22 17:51 253 查看
/*
============================================================================
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: