第一章 命令编译链接文件 make文件
为什么要将iostream文件的内容添加到程序中呢?
为什么变量必须声明?
main 的 返回值去哪里了?
定义函数时,在什么情况下不必使用关键字return?
cout 和 printf() 的区别?
C++对大小写敏感
文件扩展名cpp是一种表示C++程序的常用方式,也可使用前面的其他扩展名。
直接在命令行里面使用该程序的话可能直接一闪而过
因为没有 cin.get();
要么在编译器里运行看运行日志,或者在加上cin.get();来阻塞程序运行;
注释,由前缀//标识。
预处理器编译指令#include。
函数头:int main()。
编译指令using namespace。
函数体,用{和}括起。
使用C++的cout工具显示消息的语句。
结束main()函数的return语句。
如何运行看第一章
第一行int main()叫函数头(function heading),花括号({和})中包括的部分叫函数体。图对main()函数做了说明。函数头对函数与程序其他部分之间的接口进行了总结;函数体是指出函数应做什么的计算机指令。在C++中,每条完整的指令都称为语句。所有的语句都以分号结束,因此在输入示例代码时,请不要省略分号。
如果编译器到达main()函数末尾时没有遇到返回语句,则认为main()函数以如下语句结尾:
return 0;
这条隐含的返回语句只适用于main()函数,而不适用于其他函数。
如果程序要使用C++输入或输出工具,请提供这样两行代码:
#include
using namespace std;
也可以是
using std::cout; // make cout available
using std::endl; // make endl available
using std::cin; // make cin available
详细解释在名称空间,先知道可以这么用就好
简单而言就是让这个名称可用,程序才知道你写的cout,endl是什么东西。
using namespace std; 是让std里面的全部名称可用
using std::name; 是让std里面的name可用
注意:
使用cin和cout进行输入和输出的程序必须包含头文件iostream。
如何显示消息。使用下面的C++语句:
cout << “Come up and C++ me some time.”;
<<符号表示该语句将把这个字符串发送给cout;该符号指出了信息流动的路径。
cout是什么呢?
它是一个预定义的对象,知道如何显示字符串、数字和单个字符等
iostream文件定义了<<运算符,以便可以像下面这样合并(拼接)输出:
cout << “Now you have " << carrots << " carrots.” << endl;
这样能够将字符串输出和整数输出合并为一条语句。得到的输出与下述代码生成的相似:
cout << "Now you have “;
cout << carrots;
cout << " carrots.”;
cout << endl;
求在程序运行时输入一个值。为实现这项任务,使用了cin,这是与cout对应的用于输入的对象。
与cout一样,cin也是一个智能对象。
它可以将通过键盘输入的一系列字符(即输入)转换为接收信息的变量能够接受的形式。
功能的语句:
cin >> carrots;
从这条语句可知,信息从cin流向carrots。
#include // a PREPROCESSOR directive
该编译指令导致预处理器将iostream文件的内容添加到程序中。
这是一种典型的预处理器操作:在源代码被编译之前,替换或添加文本。
名称空间支持是一项C++特性,旨在让您编写大型程序以及将多个厂商现有的代码组合起来的程序时更容易,它还有助于组织程序。
更多的后面有专门的章节
全部的函数特性:
有函数头和函数体;
接受一个参数;
返回一个值;
需要一个原型。
函数有原型,定义,声明
函数原型:声明函数的返回类型、函数接受的参数数量和类型。
函数格式
首先,有一个函数头;然后是花括号中的函数体。可以把函数的格式统一为如下的情形:
type functionname(argumentlist)
{
statements
}
C++注释以双斜杠(//)打头
C++也能够识别C注释,C注释包括在符号/和/之间:
#include /* a C-style comment */
一条声明语句(注意其中的分号):
int carrots;
这条语句提供了两项信息:需要的内存以及该内存单元的名称。
还可以发现潜在的错误问题
carrots = 25;
符号=叫作赋值运算符。C++(和C)有一项不寻常的特性——可以连续使用赋值运算符。
例如,下面的代码是合法的:
int steinway;
int baldwin;
int yamaha;
yamaha = baldwin = steinway = 88;
答案:
涉及程序与外部世界之间的通信。
iostream中的io指的是输入(进入程序的信息)和输出(从程序中发送出去的信息)。
C++的输入/输出方案涉及iostream文件中的多个定义。
为了使用cout来显示消息,有 i/o 的程序需要这些定义。
#include编译指令导致iostream文件的内容随源代码文件的内容一起被发送给编译器。
实际上,iostream文件的内容将取代程序中的代码行#include
原始文件没有被修改,而是将源代码文件和iostream组合成一个复合文件,编译的下一阶段将使用该文件。
简单来说就是为了 发现潜在的错误问题
没有声明的变量会报错,就防止了下面的错误
有些语言(最典型的是BASIC,Python等等)在使用新名称时创建新的变量,而不用显式地进行声明。
这看上去对用户比较友好,事实上从短期上说确实如此。
如果错误地拼写了变量名,将在不知情的情况下创建一个新的变量。在BASIC或Python中,程序员可能编写如下语句:
CastleDark = 34
…
CastleDank = CastleDark + MoreGhosts
…
PRINT CastleDark
由于CastleDank是拼写错误(将r拼成了n),因此所作的修改实际上并没有修改CastleDark。
这种错误很难发现,因为它没有违反BASIC和Python中的任何规则。
然而,在C++中,将声明CastleDark,但不会声明被错误拼写的CastleDank,因此对应的C++代码将违反“使用变量前必须声明它”的规则,因此编译器将捕获这种错误,发现潜在的问题。
main()返回一个int值,而程序员要求它返回整数0。但可能会产生疑问,将这个值返回到哪里了呢?毕竟,程序中没有哪个地方可以看出对main()的调用
答案:
可以将计算机操作系统(如UNIX或Windows)看作调用程序。
因此,main()的返回值并不是返回给程序的其他部分,而是返回给操作系统。很多操作系统都可以使用程序的返回值。
例如,UNIX外壳脚本和Windows命令行批处理文件都被设计成运行程序,并测试它们的返回值(通常叫作退出值)。
通常的约定是,退出值为0则意味着程序运行成功,为非零则意味着存在问题。
因此,如果C++程序无法打开文件,可以将它设计为返回一个非零值。
然后,便可以设计一个外壳脚本或批处理文件来运行该程序,如果该程序发出指示失败的消息,则采取其他措施。
当函数的返回类型为void时,不用在函数中使用return。
然而,如果不提供返回值,则可以使用它:
return;
语言和库:
cout 是C++中的标准输出流,属于C++的标准库(iostream)的一部分。
printf() 是C语言中的标准输出函数,属于C标准库的一部分。
语法:
cout 使用运算符重载,通过 << 操作符将数据插入输出流中。例如:cout << “Hello, World!” << endl;
printf() 使用格式字符串,通过占位符将数据格式化并插入到字符串中。例如:printf(“Hello, %s!\n”, “World”);
类型安全:
cout 提供了类型安全,它在编译时检查数据类型,并根据需要执行转换。
printf() 不提供类型安全,程序员需要确保格式字符串和参数的类型匹配,否则可能会导致未定义行为或错误。
可读性:
cout 提供了更自然的C++语法,易于阅读和理解,特别是对于非程序员来说。
printf() 使用格式字符串,较难阅读,特别是对于复杂的格式化要求。
扩展性:
cout 可以通过创建自定义的输出流类来扩展,并支持自定义类型的输出。
printf() 不太容易扩展,因为它是一个函数而不是一个类。
国际化和本地化:
cout 更容易实现国际化和本地化,因为它可以通过C++的本地化支持进行扩展。
printf() 在处理多语言和本地化方面可能更复杂。
总之,选择使用cout还是printf()取决于您的编程环境和个人偏好。在C++中,通常推荐使用cout,因为它提供了更现代、类型安全和易于使用的输出方式。在C中,printf()是标准的输出函数,但请谨慎处理格式化字符串以避免安全问题。
如果已经习惯了C语言和printf(),可能觉得cout看起来很奇怪。程序员甚至可能固执地坚持使用printf()。但与使用所有转换说明的printf()相比,cout的外观一点也不奇怪。更重要的是,cout还有明显的优点。它能够识别类型的功能表明,其设计更灵活、更好用。另外,它是可扩展的(extensible)。也就是说,可以重新定义<<运算符,使cout能够识别和显示所开发的新数据类型。如果喜欢printf()提供的细致的控制功能,可以使用更高级的cout来获得相同的效果(参见第17章)。