Skip to Content
C++程序设计:原理与实践(基础篇)(原书第2版)
book

C++程序设计:原理与实践(基础篇)(原书第2版)

by 本贾尼 斯特劳斯特鲁普
August 2021
Intermediate to advanced
450 pages
9h 36m
Chinese
Pearson
Content preview from C++程序设计:原理与实践(基础篇)(原书第2版)

5.3.3 警告

当你使用编译器的时候,你会希望它足够聪明,能够理解你要表达的意思,也就是说,你可能会希望编译器报告的一些错误并不是真正的错误。这种想法是很自然的。令人惊奇的是,当你有了一定编程经验后,你会希望编译器能够拒绝更多代码,而不是更少。看下面的例子:

对于x4,我们没有从编译器得到错误信息。对于编译器来说,area(10,-7)是正确的:area()需要两个整型参数,你给定了两个,而没有人规定参数必须是正数。

对于x5来说,好的编译器将给出警告信息:double型数10.7和9.3被截取为int型数10和9(见3.9.2节)。然而,(老的)语法规则认为可以隐式地将double转换为int,因此编译器不会拒绝函数调用area(10.7,9.3)。

对x6的初始化存在与area(10.7,9.3)同样的问题。area(100,9999)的int型返回值,即999900,被赋给一个char型变量。x6最有可能的结果是“截取值”-36。同样,一个好的编译器将会报告相关的警告信息,即便(老的)语法规则不拒绝相关代码。

当获得一定编程经验后,你将学会如何脱离编译器去检查错误和避免编译器的弱点。但是,不要过分自信:“程序已编译”并不意味着它能够运行。即使它能够运行,在你消除逻辑错误前,通常程序给出的也是错误的结果。

Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Start your free trial

You might also like

C++语言导学(原书第2版)

C++语言导学(原书第2版)

本贾尼 斯特劳斯特鲁普
管理Kubernetes

管理Kubernetes

Brendan Burns, Craig Tracey
Go程序设计语言

Go程序设计语言

艾伦A. A.多诺万, 布莱恩W. 柯尼汉

Publisher Resources

ISBN: 9787111562252