编译时常量
‘壹’ c语言程序中的关于常量的计算是在编译时进行的还是程序执行时进行的
编译的时候,先会进行预编译处理,就是把程序中所有的符号常量用数字常量替换,比如说你的例子中的N,注意只是发生替换,所有的计算都是在程序执行的时候进行的! C是面向过程的,每次执行都会重新计算一次!
‘贰’ C语言中是如何定义常量的啊
我们在用C编程时有时需要定义不变的变量,即常量,有两种方法。
例如:
定义常量PI的两种方式:
1. #define Pi 3.1415926f;
2. const float pi 3.1415926f;
拓展材料:
常量有整型常量、浮点型常量、字符型常量及字符串常量。 ‘
常量定义是指定义符号常量,用一个标识符来代表一个常量,通过宏定义预处理指令来实现。
格式:#define标识符常量
由用户命名的标识符是符号常量名。作为符号常量名,一般大写。一旦定义,在程序中凡是出现常量的地方均可用符号常量名来代替。
对使用了符号常量的程序在编译前会以实际常量替代符号常量。
全局变量和局部变量的区别:
‘叁’ 什么是常量表达式 书里说,常量表达式是编译器在编译时就能够计算出结果的表达式. 不太理解,
举例:
int n = 1; //这是确定无疑的,1是常量表达式,不可能变化
另一个例子:
int x = n + 1; //编译器并不能根据这句就推断出x一定等于2,因为极有可能在其他地方改变n的值,因此编译器就不敢保证它是常量
‘肆’ C语言中是如何定义常量的啊
C语言定义常量常用的方法有以下2种:
第一种:宏定义
#define N 3 // 定义了一个常量为3的宏N,在程序中N就代表3
第二种:给变量初始化赋值
int a = 2; // 定义了一个int型变量,并赋值为2,其实这是用变量来定义常量
注:定义常量还是用宏定义的比较多。
‘伍’ java中编译期常量所指的是什么
classInitalizedClass{
static{
System.out.println("!");
}
publicstaticintinititalize_varible=1;
}
{
publicstaticvoidmain(String[]args){
System.out.println(InitalizedClass.inititalize_varible);
}
}
上面的结果是:
!
1
classInitalizedClass{
static{
System.out.println("!");
}
//和上面的例子唯一的差异就是此处的变量INITIALIZED_VARIBLE被声明为final
_VARIBLE=1;
}
{
publicstaticvoidmain(String[]args){
System.out.println(InitalizedClass.INITIALIZED_VARIBLE);
}
}
上面的结果是:
1
为什么两个例子执行结果不一样,原因是第二个例子中的INITIALIZED_VARIBLE为编译期常量,它不会导致类的初始化的
‘陆’ 什么是编译时常数 运行时常数
t.TextField;
‘柒’ c语言条件编译用常量表达书做条件,此常量表达式必须在编译时可求也就能不能让条件由scanf得到的
程序在编译时是不会执行scanf的 所以不能
‘捌’ vc++ 进行编译时 定义常量 const int UNIT_MAX=10000 报错:如何修改 是不能用UNIT_MAX吗 请说的详细点
我这么定义没错啊 ! 你是不是没有分号结束?可以用 只是我不知道你要表达这个变量时什么意思!你在定义int的时候已经说明这是个整型了,后面又加一个UNIT是在就没有必要了
感觉画蛇添足了,如果你这个变量用的地方比较多就这样定义一个宏:
#define UNIT_MAX 1000
‘玖’ 编译时出现 字符型常量太长在main函数中
#include "stdio.h"
#include "math.h"
int main()
{
char diamond[][7]=
{
{' ',' ',' ','*'},
{' ',' ','*','*','*'},
{' ','*','*','*','*','*'},
{'*','*','*','*','*','*','*'},
{' ','*','*','*','*','*'},
{' ',' ','*','*','*'},
{' ',' ',' ','*'},
};
int i,j;
for(i=0;i<7;i++)
{
for(j=0;j<7;j++)
printf("%c",diamond[i][j]);
printf("\n");
}
return 0;
}
‘拾’ java 中的编译期常量是什么使用它又什么风险
编译期常量就是所谓的 public final static 常量。
由于在编译时就确定了值,在使用的场合会直接写成值。而不是直接到原来的类中读取。
这样会有一个问题。 如果 类 A 提供了常量 类B使用了常量。并都进行了编译。
然后,修改了类A的源码,调用系统进行编译。
系统发现类A是新的代码,编译了,类B是旧的代码,就不进行编译,使用旧的类。
由于类B中直接编译进了旧的值,导致类A的修改无法反映到类B中。
这样造成了风险。