关于C中变量修饰符的简单查询

时间:2014-03-26 11:16:24

标签: c coding-style standards

我一直认为自己对C很了解,但我总是不确定这两者是否与标准相当

/* ========= */

const int i;
const int j;

/* as opposed to */

const int i, j;

/* ========= */

每当我只需要修改几个变量时,我就会使用第一种表示法。我知道这些都适用于海湾合作委员会和MSVC,但没有读过古老的" K& R",我不知道这是否符合标准。

2 个答案:

答案 0 :(得分:4)

是,以下内容:

const int i;
const int j;

相当于

const int i, j;

但是,如果那些是指向int的指针,那么

const int* i, j;

与:

不同
const int* i;
const int* j;

但后两个声明等同于:

const int *i, *j;

答案 1 :(得分:-1)

通过编译一个简单的测试并查看程序集输出,可以确定这些表达式是等效的。

main()
{
    const int i=1;
    const int j=2;
}
  

gcc test.c -S -o output.s -O0

main()
{
    const int i=1, j=2;
}

两者的输出完全相同,看起来像这样。 (我添加了评论)。

main:
    #Set up the stack frame
    pushl   %ebp
    movl    %esp, %ebp

    #Make room on the stack for 2 local variables
    subl    $16, %esp

    #Assign the literal value of 1 to the first local variable
    movl    $1, -4(%ebp)

    #Assign the literal value of 2 to the second local variable
    movl    $2, -8(%ebp)

    leave

如果你想知道没有提到“const”,这是因为const只是C语言中的一个更高级别的结构。