此代码无法编译:
const int x = 123;
const int y = x;
它抱怨y =行的“初始化元素不是常数”。 基本上我想要有两个const值,一个是根据另一个定义的。 有没有办法在C中执行此操作或者我是否必须使用type-unsafe #defines或者只是将值写为幻数?
答案 0 :(得分:8)
当分配const类型时,你只能指定文字,即:1,2,'a','b'等不是像int x,float y,const int z等变量。变量,尽管你的事实是变量实际上不是变量(因为它不能改变)是不可接受的。相反,你必须这样做:
const int x = 123;
const int y = 123;
或
#define x 123
const int y = 123;
第二个可以工作,因为编译器会在x处被剥离,并在编译之前用文字替换它。
答案 1 :(得分:3)
您可以使用enum
来实现此目标:
enum { x = 123, y = x };
(在这种情况下输入x
和y
)。
答案 2 :(得分:1)
c仅支持在编译时知道不可更改的文字或其他项目。
答案 3 :(得分:0)
C仅支持文字作为const初始值设定项。你不能用变量初始化const。
但是C确实支持
#define x 100
const int y = x;
答案 4 :(得分:0)
C仅支持文字作为const初始值设定项。所以你必须使用一些值来初始化你的const,你不能用const本身的其他变量来做。
然而,这提出了另一个重要问题。编译时编译器知道变量的“const” - 为什么不允许这种结构? ......有些C专家可以对此发表评论吗?
答案 5 :(得分:0)
您的y
不是理解C的常量,而是 const
限定变量。
编译时间常量表达式可能包含:
enum
常数sizeof
表达式并且可以将这些大部分自由地与通常的算术组合。