user-0 提问: 请教个问题，高手进，初学者请绕道。

回复:
user: user-1
content: 楼主不就是个小白，还好意思说初学者绕道……

user: user-2
content: 不好意思，我是小白，我也进来了。 c语言色灰色地带。。。 a[n][n+1]在vc下貌似直接报错吧。。。 在linux源代码你有还会发现有这样的写法。。  小白一个，说的不对轻喷

user: user-3
content: 提这种问题有意义吗

user: user-4
content: 不要迷信书、考题、老师、回帖； 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实！  有人说一套做一套，你相信他说的还是相信他做的？ 其实严格来说这个世界上古往今来所有人都是说一套做一套，不是吗？

user: user-5
content: 再一点就是当这个代码在并行处理的时候是否会产生问题

user: user-5
content: 引用 29 楼 sholber 的回复:换一个角度，考虑一个简化的模型：  int n = 1, m = n ++, a [m]; printf ("%d, %d, %d\n", n, m, sizeof a);  再审视一下，声明的过程，每个全声明符的位置，与序列点之间的关系。 这个问题我没有再回复是怕给了错误的引导，int n=1,m=n++, a[m];所有逗号和分号位置都有一个序列点，这个毫无疑问。支持的标准就是你帖的 end of a full declarator。从这样看代码没问题。但是有点奇怪的是 c++ 有说  int a, b, c; 基本上等于 int a; int b; int c;(以注脚的形式给出）注脚是不算在标准内的。而c99没找到相关的。还有一点要说明的是 逗号在这里只是个分隔符，那么是否意味着int a,b, c;可以是 int a; int c; int b; 至少目前我还没得到一个确切的答案，暂时认同 int n=1, m=n++, a[m];不会有问题。

user: user-0
content: 换一个角度，考虑一个简化的模型：  int n = 1, m = n ++, a [m]; printf ("%d, %d, %d\n", n, m, sizeof a);  再审视一下，声明的过程，每个全声明符的位置，与序列点之间的关系。

user: user-6
content: 钻牛角尖可以 ，但是不要标题党。

user: user-7
content: 引用 楼主 sholber 的回复:{     int n = 1, a [n] [n++] [n++];     //请问是a [1][1][2]还是a[1][2][3]或者其它?     printf ("%d\n", sizeof a);     //这里写到标准输出的值是多少？       n = 1;     int b [n] [sizeof ++ n] [n];     //同上问。     printf("%d\n", sizeof a);     //同上问。 } 貌似定义数组的时候不能用变量，讨论这有意义吗

user: user-0
content: int a1[f()][g()][h()], a2[k()]; The compiler might call f, g, and h in any order, but it must have called all three before calling k.

user: user-8
content: 引用 45 楼 zhao4zhong1 的回复:[quote=引用 43 楼 sholber 的回复:] [quote=引用 41 楼 zhao4zhong1 的回复:] 等楼主自己实现或参透g++（开源编译器）怎么实现的时候就会茅塞顿开了。  研究编译器怎么实现能解决问题吗？大师，你听说过实现定义的行为和未指定的行为吗？同一个问题，允许不同的编译器有不同的实现，你告诉我怎么参透，大师你真任性啊。[/quote] 在你自己照国际标准米的定义实际做出一个一米长的尺子的时候，你对实现定义的行为和未指定的行为就会茅塞顿开了。[/quote] 自顶！

user: user-0
content: 引用 45 楼 zhao4zhong1 的回复:[quote=引用 43 楼 sholber 的回复:] [quote=引用 41 楼 zhao4zhong1 的回复:] 等楼主自己实现或参透g++（开源编译器）怎么实现的时候就会茅塞顿开了。  研究编译器怎么实现能解决问题吗？大师，你听说过实现定义的行为和未指定的行为吗？同一个问题，允许不同的编译器有不同的实现，你告诉我怎么参透，大师你真任性啊。[/quote] 在你自己照国际标准米的定义实际做出一个一米长的尺子的时候，你对实现定义的行为和未指定的行为就会茅塞顿开了。[/quote]  什么乱七八糟的……

user: user-8
content: 引用 43 楼 sholber 的回复:[quote=引用 41 楼 zhao4zhong1 的回复:] 等楼主自己实现或参透g++（开源编译器）怎么实现的时候就会茅塞顿开了。  研究编译器怎么实现能解决问题吗？大师，你听说过实现定义的行为和未指定的行为吗？同一个问题，允许不同的编译器有不同的实现，你告诉我怎么参透，大师你真任性啊。[/quote] 在你自己照国际标准米的定义实际做出一个一米长的尺子的时候，你对实现定义的行为和未指定的行为就会茅塞顿开了。

user: user-9
content: （基于C99标准）首先C语言不允许定义动态数组，本身这段程序不管是否初始化都会编译出错。其次，编译器标准有所不同，就算通过编译，得到结果还是可能出现不同。最后，程序风格与规范问题。编写任何代码都不能依靠未定义的行为，也不应写出自己无法预测结果的代码。同小白，如有不对请轻喷

user: user-0
content: 引用 41 楼 zhao4zhong1 的回复:等楼主自己实现或参透g++（开源编译器）怎么实现的时候就会茅塞顿开了。  研究编译器怎么实现能解决问题吗？大师，你听说过实现定义的行为和未指定的行为吗？同一个问题，允许不同的编译器有不同的实现，你告诉我怎么参透，大师你真任性啊。

user: user-8
content: 等楼主自己实现或参透g++（开源编译器）怎么实现的时候就会茅塞顿开了。

user: user-10
content: 引用 33 楼 zxh707wk 的回复:提这种问题有意义吗 LZ的意义是没事可以多研究研究C99标准

user: user-11
content: 引用 14 楼 zhao4zhong1 的回复:不要迷信书、考题、老师、回帖； 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实！  有人说一套做一套，你相信他说的还是相信他做的？ 其实严格来说这个世界上古往今来所有人都是说一套做一套，不是吗？  不要写连自己也预测不了结果的代码！  楼主是初学者吗?

user: user-10
content: 引用 34 楼 zf97576419 的回复:不好意思，我是小白，我也进来了。 c语言色灰色地带。。。 a[n][n+1]在vc下貌似直接报错吧。。。 在linux源代码你有还会发现有这样的写法。。  小白一个，说的不对轻喷 VC不支持C99标准的变量数组

user: user-10
content: 引用 25 楼 worldy 的回复:int n = 1, a [n] [n++] [n++];  这样能通过编译??? 支持C99标准的编译器能编译