首页 > 代码库 > 程序猿之---C语言细节28(const变量初始化、数组大小用const变量细节、const变量与#define宏、volatile修饰)

程序猿之---C语言细节28(const变量初始化、数组大小用const变量细节、const变量与#define宏、volatile修饰)

主要内容:const变量初始化、数组大小用const变量细节、const变量与#define宏、volatile修饰

一、const变量初始化时必须赋值

二、const变量在C++中可以做数组大小元素、在C中不行,因为它是变量

三、const和#define区别:内存分配

四、volatile修饰一些变量:易被操纵系统、硬件、多线程修改的变量

#include <stdio.h>

int main()
{
/* 
  测试1 
*/ 
	const int b;  // 不初始化会报错 
//	b = 2;
	
/* 测试2 
 *C语言中以下定义数组大小会报错,可看出c语言中const修饰的num是变量,不是常量 
 * 而C++中则编译通过可以用 
 */ 
	const int num = 2;
//	int a[num] ={3,4}; 

/*
  测试3 
*/
	#define M 4   // 宏常量 
        const int N = 5;  //此时并未将N放入内存中,保存在符号表中 
	int i = N;   // 此时为N分配内存,以后不再分配 
	int I = M;   // 预编译起见进行宏替换,分配内存 (M没有类型,怎么分配内存) 
	int j = N;   // 没有内存分配 
	int J = M;   // 再次宏替换,有一次分配内存 
 
 
/*
   测试4 
   在做下面测试时,vc++6.0一般Debug模式没有优化,但可以同时生成Debug和Release版做测试 
*/
	int test = 10;
	int test_1 = test;
	int test_2 = test;  // 在这里赋值时,编译器不会生成汇编重新从内存读取test值(在两次赋值间test没有作为左值,否则不优化) 
	
	volatile int t;
	int t_1 = t;
	int t_2 = t;   // 在这里赋值时,t重新从内存读取 
	
	const volatile int temp;   // temp只读,可以表示只读寄存器 
}
输出:

此例子无输出

程序猿之---C语言细节28(const变量初始化、数组大小用const变量细节、const变量与#define宏、volatile修饰)