我正在准备我们的编程测试,并且我读了这个long long A[(10,10)]
声明(它在我们课程中的一些先前的测试中),我没有更多的信息。只有我知道的其他事情是,通过调用A[5][1]=something
初始化以这种方式声明的变量不可能。否则,我会认为它是某种2D阵列
它也可能是comma operator,但gcc编译器实际上并没有识别它。
abc.c:3:16:错误:预期']'
长期A [10,10];
^ abc.c:3:13:注意:要匹配这个' ['
长长的A [10,10];
你有任何线索,如果它是一个东西,或只是一些废话? (我试图谷歌它,但这些东西都不容易找到......)
谢谢。
答案 0 :(得分:4)
在数组声明中,需要constant-expression
,它是expression
的子集。具体来说,逗号运算符和赋值表达式不是集合的一部分。
数组声明符是一种direct-declarator
:
direct-declarator: ... |
direct-declarator "[" constant-expression? "]";
constant-expression: conditional-expression;
expression: assignment-expression | expression "," assignment-expression;
assignment-expression: conditional-expression |
unary-expression assignment-operator assignment-expression;
所以这里的语法不允许使用逗号。
答案 1 :(得分:2)
回答你的问题"你有任何线索,如果它是一个东西,或只是一些废话?":任何非直观的,有经验的程序员必须咨询cpp参考的声明是恕我直言显然是无稽之谈。
我用Apple LLVM 8.0编译器和C99语言方言测试了表达式long long A[(10,10)]
,并且它有效。在咨询cpp reference concerning comma operator时,可以找到以下内容:
顶级逗号运算符也不允许在数组边界
中使用// int a [2,3]; //错误
int a [(2,3)]; // OK,大小为3的VLA数组(VLA因为(2,3)不是常量表达式)
因此long long A[(10,10)]
接缝等同于long long A[10]
,其中10
是非顶级逗号表达式(10,10)
的第二部分。有趣的是,以这种方式声明的数组被视为VLA(可变长度数组,其大小在运行时确定)。