对C++之父的一个不解。

ljhhh0123 2011-09-11 11:25:54
《C++程序设计语言》十周年特别版第138页(第7章6节)有一行printf的声明:

int printf(const char * ...); //大家请看,省略号前没有逗号。

他说这描述的是C标准库函数,而与C++兼容的c89标准规定必须要加逗号。

从未在任何C/C++实现里看到这样的声明。

真是不解Bjarne Stroustrup博士为何为引入这样的别名。

实在是别扭。
...全文
6227 74 打赏 收藏 转发到动态 举报
写回复
用AI写文章
74 条回复
切换为时间正序
请发表友善的回复…
发表回复
mingyyang_xu 2011-09-19
  • 打赏
  • 举报
回复
[Quote=引用 52 楼 bmwdoc 的回复:]

good good study
[/Quote]

day day up
向日葵的爱 2011-09-19
  • 打赏
  • 举报
回复
[Quote=引用 54 楼 ljljlj 的回复:]
前几天给裘教授发个Email,他说自己没注意这个问题,让我问Bjarne Stroustrup,由于不懂英语,就没问.
今天实在忍不住就给Bjarne Stroustrup博士发个Email,写了两种写法的对比,写了一个Why?
他很快就回复了,原文如下:
Because the c committee likes commas, even if redundant. Both versio……
[/Quote]

这个回信相当的有趣。多一种标准?不会引发问题就好~
追求执着 2011-09-19
  • 打赏
  • 举报
回复
你确定不是印刷错误!!
Redsoxy 2011-09-18
  • 打赏
  • 举报
回复
[Quote=引用 54 楼 ljljlj 的回复:]
前几天给裘教授发个Email,他说自己没注意这个问题,让我问Bjarne Stroustrup,由于不懂英语,就没问.
今天实在忍不住就给Bjarne Stroustrup博士发个Email,写了两种写法的对比,写了一个Why?
他很快就回复了,原文如下:
Because the c committee likes commas, even if redundant. Both versio……
[/Quote]

大神。。。
wintree 2011-09-18
  • 打赏
  • 举报
回复
名人是永远不会有错误的,这是你懂的~~~~~~~~~~~~~~~··
哈哈王戈多 2011-09-18
  • 打赏
  • 举报
回复
本来就应该这样啊,这样是对的
杲杲 2011-09-18
  • 打赏
  • 举报
回复
好认真啊
拿分来着
lyhylex 2011-09-18
  • 打赏
  • 举报
回复
+10分
guolie1989 2011-09-18
  • 打赏
  • 举报
回复
我们都是应用者而已,这些都是标准委员会说了算。你要是发明者那也是你说了算的。
eddyflame 2011-09-18
  • 打赏
  • 举报
回复
[Quote=引用 54 楼 ljljlj 的回复:]

前几天给裘教授发个Email,他说自己没注意这个问题,让我问Bjarne Stroustrup,由于不懂英语,就没问.
今天实在忍不住就给Bjarne Stroustrup博士发个Email,写了两种写法的对比,写了一个Why?
他很快就回复了,原文如下:
Because the c committee likes commas, even if redundant. Both versi……
[/Quote]

看起来确实很冗余, C++很多地方都是改进了的, 只是为了兼容C 不得不加入那些冗余的地方, 这也是为什么C++有多种声明, 也是为什么有了类还要加入结构体. 个人感觉编写纯C++的程序最好不用C风格, 毕竟是两种语言.
fengchen2195 2011-09-17
  • 打赏
  • 举报
回复
还没看这本书路过。。。。顶。。。
lezai001 2011-09-16
  • 打赏
  • 举报
回复
楼上都有理……
michael_cat 2011-09-16
  • 打赏
  • 举报
回复
路过区分
jack010love 2011-09-16
  • 打赏
  • 举报
回复
每天回帖即可获得10分可用分!
飞天御剑流 2011-09-16
  • 打赏
  • 举报
回复
[Quote=引用 54 楼 ljljlj 的回复:]
前几天给裘教授发个Email,他说自己没注意这个问题,让我问Bjarne Stroustrup,由于不懂英语,就没问.
今天实在忍不住就给Bjarne Stroustrup博士发个Email,写了两种写法的对比,写了一个Why?
他很快就回复了,原文如下:
Because the c committee likes commas, even if redundant. Both versio……
[/Quote]

这不是习惯问题,你没看明白even if redundant这句话背后的涵义,BJ的意思是说,在C++中这个逗号被认为是多余的东西,因为即使没有这个逗号,...的意义也可以表达得足够明晰(这就是简洁),但为了将C的代码移植到C++不至于产生移植性问题,因此C++也同时支持C的方式。
rpy000 2011-09-16
  • 打赏
  • 举报
回复
真执着......
Simao 2011-09-16
  • 打赏
  • 举报
回复
看来楼主是一个较真的人...
kissthefuture 2011-09-16
  • 打赏
  • 举报
回复
学习了,支持lz
Narsil 2011-09-16
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 ljljlj 的回复:]
回1楼,没形参名很正常,因为C标准规定可以没有。
回2楼,加不加逗号,C++标准都支持。
我理解声明struct变量可以不用带struct,因为它是一个类。
但就不理解变参函数声明要少一个逗号,而少一个逗号又换来多少的好处呢?
用少敲一个字母来表示与C的不同?那为何还要兼容C的带逗号方法呢?
多一种写法企不造成多一点的混乱?

真是不解。
[/Quote]

后来回去专门查了下 tcpl 中文/英文版,写的是这样的没错.在 msdn 9.0 中:
int printf(const char *format [,argument]... );
crt 中 int __cdecl printf (const char *format, ...);

语法这东西没什么道理的,我觉得 crt 的是正确的.
franzhong 2011-09-16
  • 打赏
  • 举报
回复
可能还真...真不需要那个逗号,加上逗号多别扭啊,你从语文角度想想,我书包里有书,笔.....
期实三个点的省略号有特殊意思,不只是C++我研究的这些引擎也都是这种写法,你例如
public void loadTextures(final Texture ... pTextures) {
//调用时
loadTextures(this.texture1,this.texture2);
希望能帮的上LZ
加载更多回复(54)

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧