我一直认为自己对C很了解,但我总是不确定这两者是否与标准相当:
/* ========= */
const int i;
const int j;
/* as opposed to */
const int i, j;
/* ========= */
每当我只需要修改几个变量时,我就会使用第一种表示法。我知道这些都适用于海湾合作委员会和MSVC,但没有读过古老的" K& R",我不知道这是否符合标准。
答案 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语言中的一个更高级别的结构。