-5

这是真的 ?

1.如果我们单独使用 const 修饰符,它默认为 int。例如,

const size = 10;

方法

const int size =10; 

2.ANSI C 不需要 const 的初始化器;如果没有给出,它会将 const 初始化为 0。例如,

const int i;

方法

const i = 0;

请给出答案。根据 ANSI 标准

4

3 回答 3

3
  1. C89/90 也是如此。这不适用于 C99 或 C++。“隐式 int”规则在 C99 中被禁止,并且在 C++ 中从未存在过。

    然而,

    const size 10;
    

    不是有效的 C 语法。=仍然是必需的。一个非常古老的 C 预标准版本(称为 CRM C)使用没有 的初始化语法=,但该版本的语言甚至还const没有。

  2. 不对。在 C 中,具有静态存储持续时间的对象默认为零初始化。这意味着,例如,任何文件范围对象默认为零初始化,无论是否初始化const。默认情况下,局部变量不进行零初始化,不管它们是否是const。换句话说,这个问题与const.

    C++ 实现了类似的规范。在任何其他初始化发生之前,所有具有静态存储持续时间的对象都被初始化为零。

于 2012-07-16T16:33:18.390 回答
1

根据标准(C99,我没有检查 C++ 或更早的 C 版本),这些都不是真的。

  1. 如果您查看声明的语法定义(第 6.7 节),您会发现类型说明符不是可选的。

  2. 在默认初始化(第 6.7.8 节)中,我们发现以下内容:

    如果具有自动存储持续时间的对象未显式初始化,则其值是不确定的。如果具有静态存储持续时间的对象未显式初始化,则:

    ...

    • 如果它具有算术类型,则将其初始化为(正或无符号)零;

    ...

    这里什么都没有const

于 2012-07-16T16:28:19.940 回答
1

http://ideone.com/kl9CZ不,这不是真的。

C 允许 default int,但直到 1999 年,他们才将其定为非法。很久以前,变量int在 MSVC 2003 的 C++ 中默认为,但在标准 C++ 中,自从语言标准化以来,这一直是非法的。事实上,当我将代码输入到最新版本的 MSVC 中时,我会收到错误消息:

错误 C4430:缺少类型说明符 - 假定为 int。注意:C++ 不支持默认整数

据我所知,=在 C 或 C++ 中省略 是不合法的。

某些情况下,C 和 C++ 会将变量初始化为零,但在某些情况下,您有一些类似的东西int a = int();,并且全局/静态变量是零初始化的。在您的代码中,(如果它们在函数中)C 和 C++ 都不会对这些变量进行零初始化。

于 2012-07-16T16:30:33.840 回答