问题1 C啊,多少C++(www.cppentry.com)假汝之名而行--C、C++(www.cppentry.com)不分(2)
单击OK(确定)按钮后项目中会出现以下4个文件:
FirstCProgram.cpp StdAfx.h
StdAfx.cpp ReadMe.txt
其中,FirstCProgram.cpp是程序的主文件,此程序的main()函数就在其中,也是用户编写代码最多的地方。
3.编写自己的代码
双击FirstCProgram.cpp文件,出现其内容文本框。在其中输入"Hello,World"程序的代码。程序清单如下:
- // FirstCProgram.cpp :Defines the entry point for the console application
- //
-
- #include "stdafx.h"
- #include "stdio.h"
-
- int main(int argc, char *argv[])
- {
- /*使用printf()函数输出"Hello,World"*/
- prinrf("Hello,World!\n");
- return 0;}
然而,实际上这样最后得到的这段源程序根本不是C语言源程序,而是C++(www.cppentry.com)语言源程序。代码中第一行的注释尽管写着"FirstCProgram",但是".cpp"才是这段代码的本质。cpp是C plus plus的缩写,C++(www.cppentry.com)语言源程序的扩展名通常都为".cpp"。
这玩笑恐怕有点开大了,作为C语言书籍的作者,居然自己都不清楚自己写的根本不是C语言代码。
无独有偶,某"主流"C语言教科书在讲解C99中的_Bool数据类型时,由于所使用的编译器(Visual C++(www.cppentry.com) 6.0)并不支持C99,于是建议读者:
把文件名后缀改为.cpp作为C++(www.cppentry.com)程序运行。
无疑,这也是错误的。C++(www.cppentry.com)与C语言是两种语言,披着羊皮的狼依然是狼而不是羊。试图通过C++(www.cppentry.com)程序来理解C语言这种办法不仅毫无意义,而且很危险。因为这样会导致对C语言的误解。
由于这种混乱不清,导致很多更加错乱的谬误。比如某"主流"C语言教材中竟然将"(a=3*5)=4*3"这样错误的C语言表达式作为正确的C语言表达式来进行讲解分析。
请分析下面的赋值表达式:
(a=3*5)=4*3
先执行括号内的运算,将15赋给a,然后执行4*3的运算,得12,再把12赋给a。最后a的值为12。读者可以看到:(a=3*5)出现在赋值运算符的左侧,因此赋值表达式(a=3*5)是左值。请注意,在对赋值表达式(a=3*5)求解后,变量a得到值15,此时赋值表达式(a=3*5)=4*3相当于(a)=4*3,在执行(a=3*5)=4*3时,实际上是将4*3的积12赋给变量a,而不是赋给3*5。正因为这样,赋值表达式才能够作为左值。
这段论述是完全错误的。在C语言中,赋值表达式并非左值,因而"(a=3*5)=4*3"在语法上就是错误的,甚至根本无法编译;然而在C++(www.cppentry.com)语言中,赋值表达式却是左值。由于误把C程序作为C++(www.cppentry.com)程序编译,就会产生"(a=3*5)=4*3"是合法的C语言表达式那样的误解。
这种误解和误用还会导致其他一些不必要的禁忌。比如某教材郑重地告诉读者:
由于class是C++(www.cppentry.com)的关键字,用Visual C++(www.cppentry.com)时不应该用class作为成员名。
实际上,使用Visual C++(www.cppentry.com)编译C代码时使用class作为标识符没有任何问题。