常量编译时
发布时间: 2023-07-15 21:22:11
⑴ C语言程序中的关于常量的计算是在编译时进行的还是程序执行时进行的
编译的时候,先会进行预编译处理,就是把程序中所有的符号常量用数字常量替换,比如说你的例子中的N,注意只是发生替换,所有的计算都是在程序执行的时候进行的! C是面向过程的,每次执行都会重新计算一次!
⑵ C语言程序中的关于常量的计算是在编译时进行的还是程序执行时进行的
编译的时候,先会进行预编译处理,就是把程序中所有的符号常量用数字常量替换,比如说你的例子中的N,注意只是发生替换,所有的计算都是在程序执行的时候进行的!
C是面向过程的,每次执行都会重新计算一次!
⑶ 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为编译期常量,它不会导致类的初始化的
⑷ 什么是常量表达式 书里说,常量表达式是编译器在编译时就能够计算出结果的表达式. 不太理解,
举例:
int n = 1; //这是确定无疑的,1是常量表达式,不可能变化
另一个例子:
int x = n + 1; //编译器并不能根据这句就推断出x一定等于2,因为极有可能在其他地方改变n的值,因此编译器就不敢保证它是常量
⑸ java 中的编译期常量是什么使用它又什么风险
编译期常量就是所谓的 public final static 常量。
由于在编译时就确定了值,在使用的场合会直接写成值。而不是直接到原来的类中读取。
这样会有一个问题。 如果 类 A 提供了常量 类B使用了常量。并都进行了编译。
然后,修改了类A的源码,调用系统进行编译。
系统发现类A是新的代码,编译了,类B是旧的代码,就不进行编译,使用旧的类。
由于类B中直接编译进了旧的值,导致类A的修改无法反映到类B中。
这样造成了风险。
热点内容