在ANSI C中声明常量变量的标准是什么?

J-e*_*L-o 5 c

我通过翻阅我的C++书并重新编写C中的问题来教自己C.我想知道在C中声明变量常量的正确的行业标准方法.你还在main之外使用#define指令,还是可以使用main中的C++样式const int

pmg*_*pmg 5

constconstC中的代码与C ++中的代码非常不同。

在C语言中,这意味着该对象不会通过该标识符进行修改:

int a = 42;
const int *b = &a;

*b = 12; /* invalid, the contents of `b` are const */
a = 12; /* ok, even though *b changed */
Run Code Online (Sandbox Code Playgroud)

另外,与C ++不同,不能在开关标签中使用const对象:

const int k = 0;
switch (x) {
    case k: break; /* invalid use of const object */
}
Run Code Online (Sandbox Code Playgroud)

所以...这实际上取决于您的需求。

您的选择是

  • #define:真正的const但使用预处理器
  • const:不是真的const
  • enum: 仅限于 int

更大的例子

#define CONST 42
const int konst = 42;
enum /*unnamed*/ { fixed = 42 };

printf("%d %d %d\n", CONST, konst, fixed);

/* &CONST makes no sense */
&konst; /* can be used */
/* &fixed makes no sense */
Run Code Online (Sandbox Code Playgroud)