免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: koolcoy
打印 上一主题 下一主题

C语言里面 1 ? "123" : "1234" 是一个非法的表达式 [复制链接]

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
51 [报告]
发表于 2012-04-25 12:24 |只看该作者
回复 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" )是常量了。

  1. #include <stdio.h>

  2. int main(int argc, char* argv[])
  3. {
  4.       enum { x = sizeof( argc? "12": "6" ) };
  5.       printf( "%lu %d\n"
  6.             , (unsigned long)sizeof(char*)
  7.             , x );
  8.       return 0;
  9. }
复制代码

论坛徽章:
0
52 [报告]
发表于 2012-04-25 12:27 |只看该作者
OwnWaterloo 发表于 2012-04-25 12:24
回复 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" )  是常量有半毛钱关系?

======================================================================
1. 确实我漏看了。
2. 这个我刚知道,感谢指正。
3. 这个本来就和sizeof( argc? "12": "6" )没有半毛关系。我只是看到你说到sizeof的结果是常量,所以扔出了上面的代码。
   对于sizeof( argc? "12": "6" )来说,结果肯定是常量。因为我认为 argc ? "12" : "6"返回的是一个常量指针,那么sizeof(argc ? "12":"6")即为sizeof(const char*)。

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
53 [报告]
发表于 2012-04-25 12:34 |只看该作者
回复 52# GFree_Wind

>> 这个本来就和sizeof( argc? "12": "6" )没有半毛关系。我只是看到你说到sizeof的结果是常量,所以扔出了上面的代码。

我说的不是sizeof结果是常量,后面有补充的……

>> sizeof的结果要求是个常量,(C99有例外,但只是对VLA相关的)

VLA=variable length array。你写的test_sizeof用的就是这个东西。
C99支持, C89不支持。 但gcc支持,即使-std=c89, 除非再加pedantic。

这些说清楚后,那现在,我上面那句话还有其他问题没?

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
54 [报告]
发表于 2012-04-25 12:41 |只看该作者
回复 43# pmerofc

我是偏学院派的,而这类书已经够多了……
写个书有多累你比我清楚……


而且,以我个人的经验,对某个领域通过那么几本优秀的书,了解一个骨架之后;再读其他类似骨架的书效率很低。
还不如就各种细节问题一个一个,通过网络提供的各种资源深入研究。
描述C++骨架的书也够多了……

论坛徽章:
0
55 [报告]
发表于 2012-04-25 12:48 |只看该作者
回复 53# OwnWaterloo

没有问题。
另外,学院派真可怕。。。。

   

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
56 [报告]
发表于 2012-04-25 13:00 |只看该作者
回复 43# pmerofc
回复 55# GFree_Wind

又想了想,我算不算学院派都得打个问号……

实践派肯定不算。除了本科写了200k行左右的C++,毕业后就没写过正经代码。比如shuo chen,这方面就比他差了。

学院派也难说。
因为C++其实是个混合物,在多靠近C这个问题上,学院派(甚至包括不少实践派)都推崇:在有C++与C的alternative时,use C++ when possible。
而我是use C++ when needed。

只是我平时不喜欢强调自己的主张,比如什么什么应该用,什么什么不应该用。
否则肯定夹在中间两头不是人

论坛徽章:
0
57 [报告]
发表于 2012-04-25 13:20 |只看该作者
本帖最后由 walleeee 于 2012-04-25 13:20 编辑

回复 56# OwnWaterloo


200*1000/4=50000行/年=140行/天

坚持4年,每天140行,好多现在工作了几年的人都不行。据调查,现在程序员的代码产量平均仅为12行/天

不错,不错

李开复说大学写10万行,你2倍超标了

论坛徽章:
0
58 [报告]
发表于 2012-04-25 13:23 |只看该作者
walleeee 发表于 2012-04-25 13:20
回复 56# OwnWaterloo

12行/天  

论坛徽章:
0
59 [报告]
发表于 2012-04-25 13:28 |只看该作者
回复 58# 三月廿七


    你一般多少?

论坛徽章:
0
60 [报告]
发表于 2012-04-25 13:29 |只看该作者
不思进取、投机取巧、修修补补的弱智 12行/天
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP