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

简介: /* ============================================================================ Name : TestVariable.
/*
 ============================================================================
 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;
}

相关文章
|
2月前
初始化局部变量和全局变量
【10月更文挑战第3天】初始化局部变量和全局变量。
38 5
|
5月前
|
开发者
局部变量,在使用时再定义
关于局部变量,适时定义可以提高代码可读性并规避不必要的bug。示例代码中,为了避免误解`checkTaskApplyDTO`仅设置了`userId`,在`existAppliedTask`方法内部,可以通过将`checkTaskApplyDTO`的定义与设置属性的操作靠近,以明确其所有属性值的来源。 另外,本文还展示了一个因提前定义变量`ret`而导致的bug实例。如果将此变量的定义延迟至其实际使用前,则可以避免此类问题。适时定义变量有助于减少混淆,提高代码质量。
44 4
|
存储 C语言 Perl
西门子S7-1200的变量如何使用?什么是局部变量和全局变量?临时变量和静态变量有什么区别?
今天给大家讲一下什么是局部变量、全局变量、临时变量、静态变量,这些变量都有什么区别,以及在西门子S7-1200中这些变量如何来使用。
西门子S7-1200的变量如何使用?什么是局部变量和全局变量?临时变量和静态变量有什么区别?
|
存储 C语言 C++
函数的内部处理及全局变量和局部变量
函数的内部处理及全局变量和局部变量
129 0
函数的内部处理及全局变量和局部变量
|
Go Python
Go-变量与常量详解(声明、初始化、匿名变量、作用域等)
Go-变量与常量详解(声明、初始化、匿名变量、作用域等)
90 0
Go-变量与常量详解(声明、初始化、匿名变量、作用域等)
全局变量的声明
全局变量的声明
158 0
|
存储 程序员 编译器
容易混淆的基本概念 成员变量 局部变量 全局变量
在实际开发与学习中,特别容易混淆几个基本概念:成员变量、局部变量、全局变量。了解这些概念的属性,存储在实际编码中非常有用。
141 0
容易混淆的基本概念 成员变量 局部变量 全局变量
|
人工智能 Java
变量的值传递,地址引用(和对象成员变量、局部变量创建和初始化的内存机制)
变量的值传递,地址引用(和对象成员变量、局部变量创建和初始化的内存机制)
178 0
变量的值传递,地址引用(和对象成员变量、局部变量创建和初始化的内存机制)