C中的const值

时间:2011-04-21 03:43:29

标签: c const

此代码无法编译:

const int x = 123;
const int y = x;

它抱怨y =行的“初始化元素不是常数”。 基本上我想要有两个const值,一个是根据另一个定义的。 有没有办法在C中执行此操作或者我是否必须使用type-unsafe #defines或者只是将值写为幻数?

6 个答案:

答案 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 };

(在这种情况下输入xy)。

答案 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限定变量

编译时间常量表达式可能包含:

  1. 字面
  2. enum常数
  3. sizeof表达式
  4. 解决有关功能的表达
  5. 解决有关具有静态存储持续时间的对象的表达式
  6. 只要结果类型与左手侧的类型兼容,

    并且可以将这些大部分自由地与通常的算术组合。