当前位置:首页 » 编程软件 » 编译器常量

编译器常量

发布时间: 2022-01-30 12:16:14

A. visual studio 如何在编译期确定字串长度,特殊宏之类的

宏的作用,只是在编译期间完成替代,并不能实现计算。因此不要考虑宏实现,这个没什么可行性。

编译期间数值确定,其实可以通过const关键字实现,但说实话,这个是“消耗空间换时间”,如果有log的函数太多,太分散,并不值得。

如果log比较集中的在几个函数中,那么可以这么做:

constintfnamelen=strlen(__FUNCTION_);
log(__FUNCTION_,fanmelen);
这样,因为编译之后__FUNCTION_是一个常量,const 变量会直接从编译器的符号表中取值(这个叫C++的常量折叠),不会反复计算。


B. 在C程序中,怎么使用常量

1.数值常量:例如 a = b + 5;,这里的5就是常量。在常量后加上恰当的后缀可以表示特定类型的常量,例如1.0f是float常量。不带后缀的浮点数默认类型为double。
2.符号常量:用#define替换为数值常量,只存在于编译期。例如
#define A 5
定义了一个符号常量A,编译时预处理器会把这之后的A替换为5。
3.const数据类型:
例如定义一个int常量:const int a = 5;,这里 a 为 const int 类型。类型有const修饰时,编译器会对修改此数据的行为视为编译错误。因此把const数据作为常量使用。
另外还有字符/字符串字面量:类似'a'或"aaa"的字符/字符串为字面量。字面量在C语言中不是常量(在C++中是常量),因为C语言标准中定义了修改其中内容的操作为“未定义行为”,修改操作可能引起不确定的后果。如果约定不用指针等方式修改其中内容,可以把字面量当做常量使用。用前置的const修饰指针,可以限制指针修改其中内容,例如const char* str = "aa";,指针str指向的内容无法通过str修改,可以把str指向的内容视作常量字符串。用#define替换得到的字面量是匿名的,也可以当做常量使用。
====
[原创回答团]

C. 什么是常量表达式 书里说,常量表达式是编译器在编译时就能够计算出结果的表达式. 不太理解,

举例:
int n = 1; //这是确定无疑的,1是常量表达式,不可能变化
另一个例子:
int x = n + 1; //编译器并不能根据这句就推断出x一定等于2,因为极有可能在其他地方改变n的值,因此编译器就不敢保证它是常量

D. C语言程序中的关于常量的计算是在编译时进行的还是程序执行时进行的

编译的时候,先会进行预编译处理,就是把程序中所有的符号常量用数字常量替换,比如说你的例子中的N,注意只是发生替换,所有的计算都是在程序执行的时候进行的! C是面向过程的,每次执行都会重新计算一次!

E. 英飞凌单片机编译时常量数据在哪

p0不是普通变量,是内部寄存器,能读能写,同时它硬件上有输入输出端口和它对应

F. C语言中系统既然不给常量分配存储空间,那么编译系统又是如何"记忆"和使用常量的呢

耐心看完,你应该能明白了:
C语言中,常量和变量是放在不同的"段"(section)里,程序一旦加载,常量/变量自然都在内存里了。
常量和全程变量,放在初始化段。
局部变量,通常在栈里。
常量在程序加载时同时加载。

G. 编译时出现 字符型常量太长在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;
}

H. 什么是编译时常数 运行时常数

t.TextField;

I. 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为编译期常量,它不会导致类的初始化的

J. 如何在编译java的时候,取消编译器对编译常量的优化

遇到的问题是想重新编译某个java文件(比如A.java),里面有个常量(比如finalinta)和上次编译时不一样,但是另一个使用A.class的a的文件(比如B.java)由于在javac在上次编译的时候将当时的A.class里面的常量直接给内联了,所以就达不到想要的效果。
如果是这样的话,对于String可以使用.intern()来防止编译器进行优化,对于其他类型,可以要么不定义为常量,要么将常量定义为private,然后使用一个static方法来返回这个常量。

热点内容
python如何生成随机数 发布:2024-04-28 02:21:59 浏览:168
小雨游戏解说我的世界服务器 发布:2024-04-28 02:08:12 浏览:876
安卓怎么删除账户 发布:2024-04-28 02:06:50 浏览:828
内存解压缩 发布:2024-04-28 01:58:10 浏览:867
三星存储卡防伪 发布:2024-04-28 01:50:59 浏览:276
轻云服务器和云服务器的区别 发布:2024-04-28 01:50:32 浏览:552
xcode如何编译c语言 发布:2024-04-28 01:48:53 浏览:181
create存储过程 发布:2024-04-28 01:42:52 浏览:578
如何找缓存 发布:2024-04-28 01:24:04 浏览:947
苹果手机资料怎么传送到安卓手机 发布:2024-04-28 01:18:35 浏览:468