- 论坛徽章:
- 2
|
回复 47# GFree_Wind
或者我换种方式说……
最开始我只是写一段程序,意图是对标准苦手,对这问题感兴趣的就可以去测。
写的时候就发觉了, c? a: b 必须是 bool? T: T 类型。 所以"12", "6" 必须退化。
因为 sizeof( argc? "12": "6" ) 必须是常量, 并且也提到了C99有例外,但只是与VLA相关的部分。
你用 VLA 来说明 sizeof 不是常量:
1. 我已经提到它是例外,你看掉了
2. 之后你又用 gcc -std=c89, 但我告诉你, 这不是c89, 而是c89 + 一些gnu 扩展, 其中就包括VLA。
3. 退一万步, 即使gcc -std=c89支持VLA, sizeof 是运行时求值,又怎样? 它与 sizeof( argc? "12": "6" ) 是常量有半毛钱关系?
现在我将程序改成这样,注意那个enum,就足够说明sizeof( argc? "12": "6" )是常量了。
- #include <stdio.h>
- int main(int argc, char* argv[])
- {
- enum { x = sizeof( argc? "12": "6" ) };
- printf( "%lu %d\n"
- , (unsigned long)sizeof(char*)
- , x );
- return 0;
- }
复制代码 |
|