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

/*
 ============================================================================
 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;
}
时间: 2024-10-30 11:25:43

局部变量与全局变量在声明时的注意事项的相关文章

C语言中局部变量与全局变量在内存中的存放位置

C语言中局部变量和全局变量变量的存储类别(static,extern,auto,register) 1----局部变量和全局变量 在讨论函数的形参变量时曾经提到,形参变量只在被调用期间才分配内存单元,调用结束立即释放.这一点表明形参变量只有在函数内才是有效的,离开该函数就不能再使用了.这种变量有效性的范围称变量的作用域.不仅对于形参变量,C语言中所有的量都有自己的作用域.变量说明的方式不同,其作用域也不同.C语言中的变量,按作用域范围可分为两种,即局部变量和全局变量. 1.1局部变量 局部变量也

c++-c编译原理,如何处理同名局部变量和全局变量

问题描述 c编译原理,如何处理同名局部变量和全局变量 c中,一个文件里局部变量可以和全局变量重名.那这个文件编译出来的.o中,这两个变量的符号是怎么表示的呢?不可能符号是相同的呀!c++处理这种情况时,符号表示和c一样还是不同呢? 解决方案 建议看<linux平台上学C语言>这本书,底层讲得挺详细的. 在同一个.o文件里不存在链接性的问题,怎么名应该就无所谓了.对于全局变量跟局部变量,我觉得放的位置都差那么多,随便加个前缀就区分开了,还有局部变量可能一开始声明的时候就被替换成地址了,编译生成的

javascript中局部变量和全局变量的区别详解_javascript技巧

javascript有两种变量:局部变量和全局变量.当然,我们这篇文章是帮助大家真正的区别这两种变量. 首先,局部变量是指只能在本变量声明的函数内部调用.全局变量时整个代码中都可以调用的变量.当然,单单从字面上理解肯定是不清楚的,下面我详细的介绍下: 大家都知道,变量是需要用var关键字声明的.但是javascript中也可以隐式的使用变量,就是不用声明,直接使用.而且,千万注意,javascript把隐式声明的变量总是当成全局变量来使用的. 例如: 复制代码 代码如下: function my

深入理解C++编程中的局部变量和全局变量_C 语言

局部变量 在一个函数内部定义的变量是内部变量,它只在本函数范围内有效,也就是说只有在本函数内才能使用它们,在此函数以外是不能使用这些变量的.同样,在复合语句中定义的变量只在本复合语句范围内有效.这称为局部变量(local variable).如: 对局部变量的一些说明: 1) 主函数main中定义的变量(m, n)也只在主函数中有效,不会因为在主函数中定义而在整个文件或程序中有效.主函数也不能使用其他函数中定义的变量. 2) 不同函数中可以使用同名的变量,它们代表不同的对象,互不干扰.例如,在f

深入探讨C语言中局部变量与全局变量在内存中的存放位置_C 语言

C语言中局部变量和全局变量变量的存储类别(static,extern,auto,register) 1.局部变量和全局变量在讨论函数的形参变量时曾经提到,形参变量只在被调用期间才分配内存单元,调用结束立即释放.这一点表明形参变量只有在函数内才是有效的,离开该函数就不能再使用了.这种变量有效性的范围称变量的作用域.不仅对于形参变量,C语言中所有的量都有自己的作用域.变量说明的方式不同,其作用域也不同.C语言中的变量,按作用域范围可分为两种,即局部变量和全局变量.1.1局部变量局部变量也称为内部变量

android-Android在变量声明时用不用提前指定为null

问题描述 Android在变量声明时用不用提前指定为null public class MainActivity extends Activity { private ListView listview = null; private TextView textView = null; private String data = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(

基于C++全局变量的声明与定义的详解_C 语言

(1)编译单元(模块)在VC或VS上编写完代码,点击编译按钮准备生成exe文件时,编译器做了两步工作:第一步,将每个.cpp(.c)和相应的.h文件编译成obj文件:第二步,将工程中所有的obj文件进行LINK,生成最终.exe文件.那么,错误可能在两个地方产生:一个,编译时的错误,这个主要是语法错误:一个,链接时的错误,主要是重复定义变量等.编译单元指在编译阶段生成的每个obj文件.一个obj文件就是一个编译单元.一个.cpp(.c)和它相应的.h文件共同组成了一个编译单元.一个工程由很多编译

局部变量和全局变量的区别

       局部变量可以与全局变量重名,但是局部变量会屏蔽全局变量.要使用全局变量,需要使用::.在函数体内引用变量会用到同名的局部变量而不是全局变量,对于一些编译器来说,在同一个函数体内可以定义多个同名的局部变量.例如我们可以在一个函数内部,在两个循环中都定义同名的局部变量i,而局部变量i的作用域在那个循环体内        具体来说,全局变量和局部变量的区别如下: 1. 作用域不同:全局变量的作用域为整个程序,而局部变量的作用域为当前函数或循环等 2. 内存存储方式不同:全局变量存储在全局

c/c++全局变量的声明和定义

问题描述 c/c++全局变量的声明和定义 1.cpp const int point=50; //point 里放的是特征点的数量 fun1(){...} 2.h extern const int point; 3.cpp #include"2.h" fun2(){ float a[point]={0,} }//在cpp里定义一个point维的数组 4.h #include"2.h" class ObsFun { ObsFun(); ..... } ObsFun()