Codejie's C++ Space

Using C++

丢脸:C++害死人


    工作需要,今天写了一个C语言的H文件,都是一些类型定义,不长,不到200行。知道是在写C的代码,所以格外小心,尽量清空脑袋里面的C++,但编译检查时,还是错误比代码还多。。。被C++害死了,完成忘记C该怎么写了。。。
    下面列举一下C++的“罪状”。
1.    
code:
 typedef 
bool BOOL;
 BOOL ready;

result:
 error: syntax error before 
"BOOL"
    为什么会这样呢?因为啊,因此C语言没有‘bool’类型。。。。

2.
code:
 
enum TestType { TT1 = 0, TT2 };
 
const int LENGTH = 100;
 
char Array[LENGTH];

result:
 error: variable
-size type declared outside of any function
    为什么会这样呢?因为啊,因为C语言的变量必须定义在类型前面。。。(这里错了,请看评论)

3.
code:

enum TestType { TT1 = 0, TT2 };
TestType type;

result:
 error: syntax error before 
"type"
    为什么会这样呢?因为啊,因为C语言中enum,struct自定义类型在使用是需要在类型前面指明enum,struct什么的。。。。

4. (这个是补充的)
code:

enum T1 { tt = 0 };
enum T2 { tt = 0 };

result:
 error: redeclaration of enumerator 
'tt'
    为什么会这样呢?因为啊,因为啊,不说了。。这个问题太可怕了~

   算了,不说了,错误比代码还多,感觉狠丢脸啊。。。看来要从新学习C语言了。。。
    不过,话说回来,C语言有啥好啊,要类型没类型,要扩展没扩展,要。。最主要的,没有STL库。。。对于我这样需要对数据进行管理的代码来说,简直就是悲剧啊。。。。

posted on 2009-10-29 18:23 codejie 阅读(1159) 评论(10)  编辑 收藏 引用 所属分类: C++随笔而已

评论

# re: 丢脸:C++害死人 2009-10-29 19:50 Sunshine Alike

嘿嘿,我一直不会写C,从来都木有学过 @_@  回复  更多评论   

# re: 丢脸:C++害死人[未登录] 2009-10-31 05:28 Liu

我记得当年你给我推荐过一本书,讲的是C++内存的布置。因为要实现OOP的缘故,类的封装开销确实要比C大。我相信你还记得这个吧?

对于台式机来说,现在这点内存已经不算啥了。对于嵌入式系统,操作系统内核来说,这点开销还是很多人在乎的……

我现在工作的板子,内存才48M呢。整个Linux跑起来还要加载各种驱动模块加上应用程序,JAVA虚拟机……内存很重要的  回复  更多评论   

# re: 丢脸:C++害死人[未登录] 2009-10-31 05:35 Liu

@Liu
顺便说一句,我们板子的存储空间只有16M,其中2M可以供应用程序读写。14M包括整个操作系统加上应用程序(ftpd,tftpd,tr69,httpd,dhcpd还有其他各种统计工具监控工具时间同步软件防火墙过滤规则匹配等等等等),web的网页图片和一个简单的XML数据库……不节约用能行么  回复  更多评论   

# re: 丢脸:C++害死人 2009-11-02 08:51 wu

关于第2点不解,看英文描述不是说:在函数体外面声明了动态数组。
C99支持动态数组,但可能不允许作为全局变量定义。
你的解说莫明其妙!  回复  更多评论   

# re: 丢脸:C++害死人 2009-11-02 10:25 codejie

@Liu
你的run环境比我这边可怜好多。。。我们怎么也是两个扳子,8G内存,4个CPU,24个核,还有一个不知道大小的Shared Memory。。。在我看来,这样的条件下,完成可以使用C++来编写程序了。目前从我得到的情况看,用C的缘由是因为你们A国人,只会用C。。。。
我现在在努力把自己的脑袋变成C脑袋。。。  回复  更多评论   

# re: 丢脸:C++害死人 2009-11-02 10:32 codejie

@wu
嗯,你说的对,这个错误应该是由于动态数组的原因导致的。
我不知道C99标准定义了什么,但我用GCC 3.46还是不支持的。
想来比较好理解,程序加载时,全局变量在开始就初始了,由于在初始时并没有初始顺序的概念,因此可能存在不知道数组大小的情况,这样,动态数组就无法初始,编译错误也指出了问题所在。
不知道我这样理解是否正确,谢谢指点。  回复  更多评论   

# re: 丢脸:C++害死人[未登录] 2009-11-03 03:01 Liu

@codejie

你们是局端设备,配置当然不是我们这些用户端设备可以比拟的。

不过你们真的可以用C++了,就是估计以前的传统都是C,现在想改也难阿……  回复  更多评论   

# re: 丢脸:C++害死人 2009-11-03 08:41 wu

所谓动态数组也是通过栈空间实现的,全局变量肯定不成啦。
其实LENGTH已经被定义成常量了,在C++可以用作定义静态数组长度了,
但在C里面好像还是不可以吧?既然报了这个错,我猜她是支持动态数组的,
int fun(int n) {char array[n];} // 定义时动态,使用期间不可扩缩  回复  更多评论   

# re: 丢脸:C++害死人 2009-11-03 08:55 codejie

@Liu
是啊,只有我迎合工作,没有工作迎合我之说啊~  回复  更多评论   

# re: 丢脸:C++害死人 2009-11-03 08:56 codejie

◎wu
是的,我知道C++这样是OK的。。。  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


公告

Using C++

导航

统计

留言簿(73)

随笔分类(513)

积分与排名

最新评论

阅读排行榜

评论排行榜