#include 为什么不能去掉h

时间:2023-01-21 15:05:15
如题:C++标准不是规定标准头文件不应当加h吗

45 个解决方案

#1


兄弟,你那个不是C++标准头文件哈。
读书太教条了。

#2


windows.h 是平台SDK的东西 windows规定要加.h

#3


文件名就是windows.h,去掉了哪里找这个文件.-_-#

#4


说真的,一年多前我还把C++ Primer当神一样看,现在对他的批判远大于接受了

#5


你可这样试试:
  将编译器include下的windows.h改名为windows
然后用
#include <windows>
....
不过,这样有意义吗?

#6


楼主还要注意,Windows SDK是纯C接口不是C++的,与C兼容是C++最大生命力之所在,如果没有这一条,C++早就消失的无影无踪了。

#7


这只是个文件名....

#8


引用 4 楼 jackyjkchen 的回复:
说真的,一年多前我还把C++ Primer当神一样看,现在对他的批判远大于接受了

举个例子?

#9


哥只是传说 强势观望中

#10


引用 8 楼 yqever 的回复:
引用 4 楼 jackyjkchen 的回复:
说真的,一年多前我还把C++ Primer当神一样看,现在对他的批判远大于接受了

举个例子?

我也观望

#11


引用 8 楼 yqever 的回复:
引用 4 楼 jackyjkchen 的回复:
说真的,一年多前我还把C++ Primer当神一样看,现在对他的批判远大于接受了

举个例子?

楼主难道不是把C++Primer读死了么?

cstdio,cstdlib这种东西在C++社区中争议都很大,说这种方式丑陋的远比认同的多,到现在这种命名方式几乎成了STL独家,别无分店,而C++ Primer对这个问题毫无商量余地——C++程序员使用stdio.h就是不对!

如果你了解我对长期以来C++前途的看法应该不难理解我今天所说的。 C++ Primer对一些明明无关紧要但与C语言相关的东西持有严重的排斥态度,其作者心态根本就是护犊子,相与C语言完全割裂,并不是从实用的角度,连C++最经典的教材都以这种不现实的心态面对世人,C++沦落成象牙塔里的“教学语言便不足为奇了”,学C++的多,用C++的少,这种情况只会越来越严重!

#12


如果将STL里面我们见得多了习惯了,C标准库的那一套cstdio.h打死我也不接受,日后tr1进标准库呢?原来的boost用户可都是用hpp的,功能类似的tr1也把尾巴掐掉?

#13


MD,cstdio.h,我太有才了

#14


Advice: Use the C++ Versions of C Library Headers
In addition to facilities defined specifically for C++, the C++ library incorporates the C library. The cctype header makes available the C library functions defined in the C header file named ctype.h.

The standard C headers names use the form name.h. The C++ versions of these headers are named cnamethe C++ versions remove the .h suffix and precede the name by the letter c. Thec indicates that the header originally comes from the C library. Hence, cctype has the same contents as ctype.h, but in a form that is appropriate for C++ programs. In particular, the names defined in the cname headers are defined inside the std namespace, whereas those defined in the .h versions are not.

Ordinarily, C++ programs should use the cname versions of headers and not the name.h versions. That way names from the standard library are consistently found in the std namespace. Using the .h headers puts the burden on the programmer to remember which library names are inherited from C and which are unique to C++.

这是C++ PRIMER里的原话,很明显,作者只是在提了个建议而已。远没有达到你所说的“护犊子”的程度。

#15


win32用C写的,是这原因吗

#16


warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.

微软使用自己的非标准库替代标准库,也仅仅是提出个建议来,不清楚为什么某些C++原教旨主义者却因为这句话将微软说的如魔鬼般邪恶——绑架用户,破坏C++可移植性。

所谓的建议,就是自己的想法,意识形态决定的!在这一点上,微软和C++标准委员会各怀鬼胎,谁也别说谁!

#17


你看微软的措辞,may be,Consider,瞧这词用的多和谐,比C++ Primer里商量的口气更浓吧,但是我好像看到市面上针对这个C++问题骂微软的貌似更多啊。

再举个例子,char *p = NULL;和char *p = 0;C语言推荐前者,C++推荐后者,请给出个理由先,我怎么看好像都是前者更有意义啊。

#18


我相信C++标准委员会那帮人一定熟读*语录——凡是C语言支持的,就是我们所反对的;宁要C++的草,不要C语言的苗。

#19


哈~~,强势围观

#20


因为是Windows,不是C++。

#21


强势围观。。。
仅仅围观。

#22


我也围观

#23


引用 17 楼 jackyjkchen 的回复:
再举个例子,char *p = NULL;和char *p = 0;C语言推荐前者,C++推荐后者,请给出个理由先,我怎么看好像都是前者更有意义啊。

By Bjarne Stroustrup:

Should I use NULL or 0?
In C++, the definition of NULL is 0, so there is only an aesthetic difference. I prefer to avoid macros, so I use 0. Another problem with NULL is that people sometimes mistakenly believe that it is different from 0 and/or not an integer. In pre-standard code, NULL was/is sometimes defined to something unsuitable and therefore had/has to be avoided. That's less common these days. 
If you have to name the null pointer, call it nullptr; that's what it's going to be called in C++0x. Then, "nullptr" will be a keyword. 

#24


引用 23 楼 yqever 的回复:
By Bjarne Stroustrup:

Should I use NULL or 0?
In C++, the definition of NULL is 0, so ther……

这篇高论我读过,C++推荐用0的的说法正源于此。

可悲的是,C++之父正是“C++去C化”的幕后首脑,他不用NULL的最大理由是什么?宏!这正是C++Primer中看C不顺眼的又一罪证,什么用const代替宏,难道没争议,那些认同这最多也不过就是搬原文而已,没有任何有说服力的见解。


我在引用C++字符的一段高论,我想,启用新就更明显了。完全是针对的C语言。
C中流行的是用一个宏NULL来表示0指针。由于C++收紧的类型检查规则,采用普通的0而不是一些人建议的NULL宏,带来的问题会更少一些。如果你感到必须定义NULL,请采用:const   int  NULL  =  0;"   

#25


瞧见没有,C++之父弃用NULL的直接原因恐怕应该是“C中太流行了”

实际上,就他所提到的一个问题,各种编译器都完美的解决了。

#ifdef __cplusplus
#define NULL    0
#else
#define NULL    ((void *)0)
#endif

这还有什么所谓的“收紧的类型检查”限制?敢问大家在C++中用NULL遇到过任何的问题么?答案:没有!是谁在扯淡?

#26


即便是在所谓“紧跟标准”的gcc里面,你也见不到那const int NULL = 0;

#27


引用 11 楼 jackyjkchen 的回复:
引用 8 楼 yqever 的回复:
引用 4 楼 jackyjkchen 的回复:
说真的,一年多前我还把C++ Primer当神一样看,现在对他的批判远大于接受了

举个例子?

楼主难道不是把C++Primer读死了么?

cstdio,cstdlib这种东西在C++社区中争议都很大,说这种方式丑陋的远比认同的多,到现在这种命名方式几乎成了STL独家,别无分店,而C++ Pr……


看到这里,先顶一下

#28


引用 17 楼 jackyjkchen 的回复:
你看微软的措辞,may be,Consider,瞧这词用的多和谐,比C++ Primer里商量的口气更浓吧,但是我好像看到市面上针对这个C++问题骂微软的貌似更多啊。

再举个例子,char *p = NULL;和char *p = 0;C语言推荐前者,C++推荐后者,请给出个理由先,我怎么看好像都是前者更有意义啊。

我也是这么想的

#29


所谓尽信书不如无书,java和C#取消C++的多继承,其理由很有说服力,而且C#和java确实用接口的方式弥补了可能的功能损失,相对的java取消运算符重载其争议就大得多,最后的结果是什么?java的模仿者兼竞争对手C#又把运算符重载请了回来!

当你第二遍读C++Primer,当你有了不错的C语言根基再读C++Primer,会发现里面许多的东西就是针对C的而要另立门户的, C++反对的许多内容不是C中的争议技术,而恰恰是C语言中使用极其普遍而且得到了大量工程验证的,你说用0代替NULL,const代替宏,对不起,业界最大的软件公司微软就不屌你,你说现代的C++程序不用指针,对不起全世界的C++程序员几乎都不屌你。用心何在?C#和java是踏踏实实的改进C++的缺陷,所以才有今天,C++名义上兼容C,却竟在一些根本就不能称为缺陷的小地方給C下绊,气量太小了些吧!

#30


就拿那个搞笑的“现代的C++程序不用指针”,然后用string的例子“证明”自己比char*多好用(自动延长C里面都提供了realloc,查找、统计等算法C标准库里都有提供,我真是看不出STL的string比char*强多少,和C#、JAVA哪怕是MFC的字符串根本不能比),说这话也不掂掂自己的分量,C#、JAVA怎么做到不用指针的?答案只有一个,库功能太丰富了,什么都有,就C++那个贫乏的标准库,也好意思说这话,脸皮够厚!

C#和java,能够做到只使用默认的标准库就能开发出一个像样的软件来,C++呢?有种你不用api,不用其他的库,光用标准库除了学校里上C++和数据结构课够用,就没有一个正式的开发场合是够用的!

#31


由此看来,Standard C++真是一门为教学而生的语言!

#32


难道说C++已经米了。。。。

#33


whatever..

#34


引用 32 楼 wei77316 的回复:
难道说C++已经米了。。。。

可以设么说,C++近年下跌的幅度怕是仅次于delphi、VB这些一只脚已踏入坟墓的语言,而C语言的重获新生直逼JAVA则是对C++绝大的讽刺。

这个时候C++拥趸们总是找理由,说什么C有他自己的一亩三分地(操作系统,嵌入式),而C++则要在正面战场和java、C#火并,这种说法很普遍,骗了不少人。

而实际上呢?谁说C的一亩三分地就是C的,事实上不使用虚函数多态的C++效率不比C低啊,现实就有一个Windows操作系统的例子(据说C++代码超过了C,WIN2000的泄露版C++就很多,现在只会更多),还有个浅层封装的MFC不比API消息循环慢的例子,Windows核心编程的实力基本上都是C++浅封装API后调用,受其影响我将我用过的一些C算法库,包括写过的一些C程序做了个浅封装,事实证明——基本看不出区别!

但为什么,人们会感到C++无力在C的领域撼动C? 就是因为许多人中了毒,认为C++就应该滥用模板,认为C++就应该过度设计,认为C++就应该有长的吓人的继承树,天哪,你自己都把C++写成java了,你不和java去火并,还有第二条路么?

大家仔细想想,为什么为C++委员会所不齿的微软却成功将阉割的C++(相信我,Windows操作系统里用C++绝不敢大肆玩什么面向对象、设计模式,绝不会虚函数成群,模板泛滥)打入了C的领域(自己的Windows操作系统,微软会拿自己的命开玩笑么?),无论是操作系统还是表层应用,成了C++的最大领土,而正版的C++却逐渐走向绝路。而Windows

#35


有些人总是抱怨C++的开发效率低,要想赶上java和.net就必须改善开发效率,基于这一理论加上C++长期对C的不友好策略,本应代表C++长久生命力的浅封装类库MFC等不受许多的C++拥趸的待见。

殊不知,这些人看对了问题的所在却走错了解决问题的路,他们解决开发效率的方法就是过度设计、崇尚技巧,结果呢?舍得其反,弄个ACE比socket API难用,弄个boost比STL难用,这就是你们解决开发效率的方式?人们对ACE的评价就是——不学通他的设计思想,你就用不转,再往前一步怕就是“你自己写不出来ACE,你也就别想用ACE……”

类库设计不从易用性和功能性考虑反从什么技巧和设计模式考虑,拜托,我水平次,我只想用你的类库解决我的问题,不想学你那狗屁的思想!

真要是像从根本上解决C++的功能和开发效率问题,就应该参照Windows SDK的功能(必须承认,这才是有实用价值几乎无所不包的库,即便他不是C++的),封装一套浅封装、易使用, 不要搞那么多的思想,不要那么多的模式,当我要用到某个功能时,我只想声明一个类对象,调用一个成员而已!!!就像.net就像java的标准库,这需要那么多的技巧么?需要模板虚函数泛滥么?

#36


jackyjkchen说的话好高级啊,无论如何,先膜拜一下。

#37


膜拜了~~~~~~~~~~~~

#38


想想java和.net的标准库,Math类清一色的静态成员,去掉类名的话就是math.h的翻版,再看一个浅封装的socket API


class WSocket
{
public:
WSocket(SOCKET sock = INVALID_SOCKET);
~WSocket();
bool Create(int af, int type, int protocol = 0);
bool Connect(const char* ip, unsigned short port);
bool Bind(unsigned short port);
bool Listen(int backlog = 5); 
bool Accept(WSocket& s, char* fromip = NULL);
int Send(const char* buf, int len, int flags = 0);
int Recv(char* buf, int len, int flags = 0);
int Close();
int GetError();
static int Init();
static int Clean();
static bool DnsParse(const char* domain, char* ip);
WSocket& operator = (SOCKET s);
operator SOCKET ();
protected:
SOCKET m_sock;
static int sprintf(char *buffer, const char * format, ...);
};


其实我最想要的就是这种类库,说真的,哪怕C++的标准库能把全部Windows SDK封装到这样,那C++的易用性和开发效率不止上了一个台阶。

#39


浅封装才是效率最高也是最易用的,必要时static破坏封装能大大降低复杂度。

有一阵子我总为类函数面动不动static而烦恼,我现在想明白了,只要能大大降低复杂度,我宁可全用静态类!

#40


怨气得以发泄,88

#41


引用 4 楼 jackyjkchen 的回复:
说真的,一年多前我还把C++ Primer当神一样看,现在对他的批判远大于接受了



我最近还在看呢
。。。。

#42


jackyjkchen, 怨气好重……

#43


哈哈  
简直成了C++的批判大会了,我还在看C++primer呢。
有些东西越是简单可能却越强大。

#44


人家问个头文件的初级问题都能牵扯出这么多东西来,真是让人无语

#45


引用 44 楼  的回复:
人家问个头文件的初级问题都能牵扯出这么多东西来,真是让人无语


+1


我也是这样认为的。。
我觉得吧,就算他们吵得在激烈,在说C++如何的不好,如何的好。

跟我有一毛钱的关系?我就是用C++,不管你说的是什么

#1


兄弟,你那个不是C++标准头文件哈。
读书太教条了。

#2


windows.h 是平台SDK的东西 windows规定要加.h

#3


文件名就是windows.h,去掉了哪里找这个文件.-_-#

#4


说真的,一年多前我还把C++ Primer当神一样看,现在对他的批判远大于接受了

#5


你可这样试试:
  将编译器include下的windows.h改名为windows
然后用
#include <windows>
....
不过,这样有意义吗?

#6


楼主还要注意,Windows SDK是纯C接口不是C++的,与C兼容是C++最大生命力之所在,如果没有这一条,C++早就消失的无影无踪了。

#7


这只是个文件名....

#8


引用 4 楼 jackyjkchen 的回复:
说真的,一年多前我还把C++ Primer当神一样看,现在对他的批判远大于接受了

举个例子?

#9


哥只是传说 强势观望中

#10


引用 8 楼 yqever 的回复:
引用 4 楼 jackyjkchen 的回复:
说真的,一年多前我还把C++ Primer当神一样看,现在对他的批判远大于接受了

举个例子?

我也观望

#11


引用 8 楼 yqever 的回复:
引用 4 楼 jackyjkchen 的回复:
说真的,一年多前我还把C++ Primer当神一样看,现在对他的批判远大于接受了

举个例子?

楼主难道不是把C++Primer读死了么?

cstdio,cstdlib这种东西在C++社区中争议都很大,说这种方式丑陋的远比认同的多,到现在这种命名方式几乎成了STL独家,别无分店,而C++ Primer对这个问题毫无商量余地——C++程序员使用stdio.h就是不对!

如果你了解我对长期以来C++前途的看法应该不难理解我今天所说的。 C++ Primer对一些明明无关紧要但与C语言相关的东西持有严重的排斥态度,其作者心态根本就是护犊子,相与C语言完全割裂,并不是从实用的角度,连C++最经典的教材都以这种不现实的心态面对世人,C++沦落成象牙塔里的“教学语言便不足为奇了”,学C++的多,用C++的少,这种情况只会越来越严重!

#12


如果将STL里面我们见得多了习惯了,C标准库的那一套cstdio.h打死我也不接受,日后tr1进标准库呢?原来的boost用户可都是用hpp的,功能类似的tr1也把尾巴掐掉?

#13


MD,cstdio.h,我太有才了

#14


Advice: Use the C++ Versions of C Library Headers
In addition to facilities defined specifically for C++, the C++ library incorporates the C library. The cctype header makes available the C library functions defined in the C header file named ctype.h.

The standard C headers names use the form name.h. The C++ versions of these headers are named cnamethe C++ versions remove the .h suffix and precede the name by the letter c. Thec indicates that the header originally comes from the C library. Hence, cctype has the same contents as ctype.h, but in a form that is appropriate for C++ programs. In particular, the names defined in the cname headers are defined inside the std namespace, whereas those defined in the .h versions are not.

Ordinarily, C++ programs should use the cname versions of headers and not the name.h versions. That way names from the standard library are consistently found in the std namespace. Using the .h headers puts the burden on the programmer to remember which library names are inherited from C and which are unique to C++.

这是C++ PRIMER里的原话,很明显,作者只是在提了个建议而已。远没有达到你所说的“护犊子”的程度。

#15


win32用C写的,是这原因吗

#16


warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.

微软使用自己的非标准库替代标准库,也仅仅是提出个建议来,不清楚为什么某些C++原教旨主义者却因为这句话将微软说的如魔鬼般邪恶——绑架用户,破坏C++可移植性。

所谓的建议,就是自己的想法,意识形态决定的!在这一点上,微软和C++标准委员会各怀鬼胎,谁也别说谁!

#17


你看微软的措辞,may be,Consider,瞧这词用的多和谐,比C++ Primer里商量的口气更浓吧,但是我好像看到市面上针对这个C++问题骂微软的貌似更多啊。

再举个例子,char *p = NULL;和char *p = 0;C语言推荐前者,C++推荐后者,请给出个理由先,我怎么看好像都是前者更有意义啊。

#18


我相信C++标准委员会那帮人一定熟读*语录——凡是C语言支持的,就是我们所反对的;宁要C++的草,不要C语言的苗。

#19


哈~~,强势围观

#20


因为是Windows,不是C++。

#21


强势围观。。。
仅仅围观。

#22


我也围观

#23


引用 17 楼 jackyjkchen 的回复:
再举个例子,char *p = NULL;和char *p = 0;C语言推荐前者,C++推荐后者,请给出个理由先,我怎么看好像都是前者更有意义啊。

By Bjarne Stroustrup:

Should I use NULL or 0?
In C++, the definition of NULL is 0, so there is only an aesthetic difference. I prefer to avoid macros, so I use 0. Another problem with NULL is that people sometimes mistakenly believe that it is different from 0 and/or not an integer. In pre-standard code, NULL was/is sometimes defined to something unsuitable and therefore had/has to be avoided. That's less common these days. 
If you have to name the null pointer, call it nullptr; that's what it's going to be called in C++0x. Then, "nullptr" will be a keyword. 

#24


引用 23 楼 yqever 的回复:
By Bjarne Stroustrup:

Should I use NULL or 0?
In C++, the definition of NULL is 0, so ther……

这篇高论我读过,C++推荐用0的的说法正源于此。

可悲的是,C++之父正是“C++去C化”的幕后首脑,他不用NULL的最大理由是什么?宏!这正是C++Primer中看C不顺眼的又一罪证,什么用const代替宏,难道没争议,那些认同这最多也不过就是搬原文而已,没有任何有说服力的见解。


我在引用C++字符的一段高论,我想,启用新就更明显了。完全是针对的C语言。
C中流行的是用一个宏NULL来表示0指针。由于C++收紧的类型检查规则,采用普通的0而不是一些人建议的NULL宏,带来的问题会更少一些。如果你感到必须定义NULL,请采用:const   int  NULL  =  0;"   

#25


瞧见没有,C++之父弃用NULL的直接原因恐怕应该是“C中太流行了”

实际上,就他所提到的一个问题,各种编译器都完美的解决了。

#ifdef __cplusplus
#define NULL    0
#else
#define NULL    ((void *)0)
#endif

这还有什么所谓的“收紧的类型检查”限制?敢问大家在C++中用NULL遇到过任何的问题么?答案:没有!是谁在扯淡?

#26


即便是在所谓“紧跟标准”的gcc里面,你也见不到那const int NULL = 0;

#27


引用 11 楼 jackyjkchen 的回复:
引用 8 楼 yqever 的回复:
引用 4 楼 jackyjkchen 的回复:
说真的,一年多前我还把C++ Primer当神一样看,现在对他的批判远大于接受了

举个例子?

楼主难道不是把C++Primer读死了么?

cstdio,cstdlib这种东西在C++社区中争议都很大,说这种方式丑陋的远比认同的多,到现在这种命名方式几乎成了STL独家,别无分店,而C++ Pr……


看到这里,先顶一下

#28


引用 17 楼 jackyjkchen 的回复:
你看微软的措辞,may be,Consider,瞧这词用的多和谐,比C++ Primer里商量的口气更浓吧,但是我好像看到市面上针对这个C++问题骂微软的貌似更多啊。

再举个例子,char *p = NULL;和char *p = 0;C语言推荐前者,C++推荐后者,请给出个理由先,我怎么看好像都是前者更有意义啊。

我也是这么想的

#29


所谓尽信书不如无书,java和C#取消C++的多继承,其理由很有说服力,而且C#和java确实用接口的方式弥补了可能的功能损失,相对的java取消运算符重载其争议就大得多,最后的结果是什么?java的模仿者兼竞争对手C#又把运算符重载请了回来!

当你第二遍读C++Primer,当你有了不错的C语言根基再读C++Primer,会发现里面许多的东西就是针对C的而要另立门户的, C++反对的许多内容不是C中的争议技术,而恰恰是C语言中使用极其普遍而且得到了大量工程验证的,你说用0代替NULL,const代替宏,对不起,业界最大的软件公司微软就不屌你,你说现代的C++程序不用指针,对不起全世界的C++程序员几乎都不屌你。用心何在?C#和java是踏踏实实的改进C++的缺陷,所以才有今天,C++名义上兼容C,却竟在一些根本就不能称为缺陷的小地方給C下绊,气量太小了些吧!

#30


就拿那个搞笑的“现代的C++程序不用指针”,然后用string的例子“证明”自己比char*多好用(自动延长C里面都提供了realloc,查找、统计等算法C标准库里都有提供,我真是看不出STL的string比char*强多少,和C#、JAVA哪怕是MFC的字符串根本不能比),说这话也不掂掂自己的分量,C#、JAVA怎么做到不用指针的?答案只有一个,库功能太丰富了,什么都有,就C++那个贫乏的标准库,也好意思说这话,脸皮够厚!

C#和java,能够做到只使用默认的标准库就能开发出一个像样的软件来,C++呢?有种你不用api,不用其他的库,光用标准库除了学校里上C++和数据结构课够用,就没有一个正式的开发场合是够用的!

#31


由此看来,Standard C++真是一门为教学而生的语言!

#32


难道说C++已经米了。。。。

#33


whatever..

#34


引用 32 楼 wei77316 的回复:
难道说C++已经米了。。。。

可以设么说,C++近年下跌的幅度怕是仅次于delphi、VB这些一只脚已踏入坟墓的语言,而C语言的重获新生直逼JAVA则是对C++绝大的讽刺。

这个时候C++拥趸们总是找理由,说什么C有他自己的一亩三分地(操作系统,嵌入式),而C++则要在正面战场和java、C#火并,这种说法很普遍,骗了不少人。

而实际上呢?谁说C的一亩三分地就是C的,事实上不使用虚函数多态的C++效率不比C低啊,现实就有一个Windows操作系统的例子(据说C++代码超过了C,WIN2000的泄露版C++就很多,现在只会更多),还有个浅层封装的MFC不比API消息循环慢的例子,Windows核心编程的实力基本上都是C++浅封装API后调用,受其影响我将我用过的一些C算法库,包括写过的一些C程序做了个浅封装,事实证明——基本看不出区别!

但为什么,人们会感到C++无力在C的领域撼动C? 就是因为许多人中了毒,认为C++就应该滥用模板,认为C++就应该过度设计,认为C++就应该有长的吓人的继承树,天哪,你自己都把C++写成java了,你不和java去火并,还有第二条路么?

大家仔细想想,为什么为C++委员会所不齿的微软却成功将阉割的C++(相信我,Windows操作系统里用C++绝不敢大肆玩什么面向对象、设计模式,绝不会虚函数成群,模板泛滥)打入了C的领域(自己的Windows操作系统,微软会拿自己的命开玩笑么?),无论是操作系统还是表层应用,成了C++的最大领土,而正版的C++却逐渐走向绝路。而Windows

#35


有些人总是抱怨C++的开发效率低,要想赶上java和.net就必须改善开发效率,基于这一理论加上C++长期对C的不友好策略,本应代表C++长久生命力的浅封装类库MFC等不受许多的C++拥趸的待见。

殊不知,这些人看对了问题的所在却走错了解决问题的路,他们解决开发效率的方法就是过度设计、崇尚技巧,结果呢?舍得其反,弄个ACE比socket API难用,弄个boost比STL难用,这就是你们解决开发效率的方式?人们对ACE的评价就是——不学通他的设计思想,你就用不转,再往前一步怕就是“你自己写不出来ACE,你也就别想用ACE……”

类库设计不从易用性和功能性考虑反从什么技巧和设计模式考虑,拜托,我水平次,我只想用你的类库解决我的问题,不想学你那狗屁的思想!

真要是像从根本上解决C++的功能和开发效率问题,就应该参照Windows SDK的功能(必须承认,这才是有实用价值几乎无所不包的库,即便他不是C++的),封装一套浅封装、易使用, 不要搞那么多的思想,不要那么多的模式,当我要用到某个功能时,我只想声明一个类对象,调用一个成员而已!!!就像.net就像java的标准库,这需要那么多的技巧么?需要模板虚函数泛滥么?

#36


jackyjkchen说的话好高级啊,无论如何,先膜拜一下。

#37


膜拜了~~~~~~~~~~~~

#38


想想java和.net的标准库,Math类清一色的静态成员,去掉类名的话就是math.h的翻版,再看一个浅封装的socket API


class WSocket
{
public:
WSocket(SOCKET sock = INVALID_SOCKET);
~WSocket();
bool Create(int af, int type, int protocol = 0);
bool Connect(const char* ip, unsigned short port);
bool Bind(unsigned short port);
bool Listen(int backlog = 5); 
bool Accept(WSocket& s, char* fromip = NULL);
int Send(const char* buf, int len, int flags = 0);
int Recv(char* buf, int len, int flags = 0);
int Close();
int GetError();
static int Init();
static int Clean();
static bool DnsParse(const char* domain, char* ip);
WSocket& operator = (SOCKET s);
operator SOCKET ();
protected:
SOCKET m_sock;
static int sprintf(char *buffer, const char * format, ...);
};


其实我最想要的就是这种类库,说真的,哪怕C++的标准库能把全部Windows SDK封装到这样,那C++的易用性和开发效率不止上了一个台阶。

#39


浅封装才是效率最高也是最易用的,必要时static破坏封装能大大降低复杂度。

有一阵子我总为类函数面动不动static而烦恼,我现在想明白了,只要能大大降低复杂度,我宁可全用静态类!

#40


怨气得以发泄,88

#41


引用 4 楼 jackyjkchen 的回复:
说真的,一年多前我还把C++ Primer当神一样看,现在对他的批判远大于接受了



我最近还在看呢
。。。。

#42


jackyjkchen, 怨气好重……

#43


哈哈  
简直成了C++的批判大会了,我还在看C++primer呢。
有些东西越是简单可能却越强大。

#44


人家问个头文件的初级问题都能牵扯出这么多东西来,真是让人无语

#45


引用 44 楼  的回复:
人家问个头文件的初级问题都能牵扯出这么多东西来,真是让人无语


+1


我也是这样认为的。。
我觉得吧,就算他们吵得在激烈,在说C++如何的不好,如何的好。

跟我有一毛钱的关系?我就是用C++,不管你说的是什么