首页 文章

C声明顺序(在多变量声明行中)

提问于
浏览
4

我在我的C代码中使用以下内容:

int a = 0, b = a;

我想知道这种行为是否可靠且定义良好(从名称声明的顺序到左右),并且我的代码不会因为 undeclared name 错误而与其他编译器断开 .

如果不可靠,我会打破声明:

int a = 0; 
int b = a;

谢谢 .

2 回答

  • 1

    你想提出这个问题的事实表明这种风格并不好 . 尽管单行版本可以保证有效,但我仍然会采用双线方式来提高人类读者的清晰度 .

  • 2

    我相信答案是否定的,这取决于core active issue 1342,其中说:

    目前尚不清楚现有规范中的内容是否要求在声明顺序中执行单个声明中的多个init-declarators的初始化 .

    我们在[dcl.decl]p3中有非规范性说明,其中说:

    ... [注意:具有多个声明符的声明通常等效于具有单个声明符的相应声明序列 . 那是T D1,D2,... Dn;
    通常相当于T D1; T D2; ...... T Dn;
    ...

    但它是非规范性的,它根本不包括初始化案例,据我所知,没有规范性措辞说同样的事情 .

    虽然该标准确实涵盖[basic.scope.pdecl]p1中的名称范围,其中说:

    名称的声明点在其完整的声明者之后和初始化者之前(如果有的话),除非如下所述 . [例子:unsigned char x = 12;

    这里第二个x用它自己的(不确定的)值初始化 . - 结束例子]

相关问题