【C++ 学习】03 做个遵纪守法的码农

【C++ 学习】03 做个遵纪守法的Coder

说明

本系列文章是对C++ primer 第五版学习的相应的学习记录总结。
本文将对学习C++时常用的编程Tips进行总结,以便编出健壮的代码。(本文将持续更新)

资料推荐

如何做一个个遵纪守法的Coder呢?有以下的书籍可以好好参考
Effective C++:改善程序与设计的55个具体做法
Effective STL中文版
当然,C++ primer中的一些建议,也是很有价值的。

记录

chapter 1

1.1 注释界定符号不能嵌套(P9页)

  • Comment Pairs Do Not Nest, A comment that begins with /* ends with the next */. As a result, one comment pair
    cannot appear inside another.
/*
 * comment pairs /*   */ cannot nest.
 * ''cannot nest'' is considered source code,
 * as is the rest of the program
 */
int main()
{
    return 0;
}

1.2 #include头文件的问题

As we’ve seen, to use a library facility, we must include the associated header.Similarly, we use headers to access classes defined for our own applications.Conventionally, header file names are derived from the name of a class defined in that header. Header files that we write usually have a suffix of .h, but some programmersuse .H, .hpp, or .hxx. The standard library headers typically have no suffix at all.Compilers usually don’t care about the form of header file names, but IDEs sometimes do. (P20)

无论这个文件是C++提供的还是自己编写的,使用#include “文件名”命令一定是正确的。
#include <文件名>:包含C++提供的头文件时,应该使用尖括号。
#include “文件名”: 自定义头文件用“”,先在当前文件所在的目录搜索是否有符合的文件,如果没有再到Include文件夹里去找对应的文件。

关于标准的尖括号 参考
最新的C++标准中,包含C++提供的头文件并不是写作#include <文件名>, 如#include <iostream.h>的写法是过时的。正确的写法是#include <iostream>,并且要使用std名字空间。

chapter 2

2.1防止重复包含头文件,“头文件卫士”加以保护

Headers should have guards, even if they aren’t (yet) included by another header. Header guards are trivial to write, and by habitually defining them you don’t need to decide whether they are needed.(page 68)
假设,我们的工程中有如下三个文件:a.h、b.h和c.cpp,其中b文件中包含了a.h,c文件中又分别包含了a.h和b.h两个文件,如图所示。
这里写图片描述

图 工程文件示例
在编译整个工程时,编译器会出现“multiple definition of”错误。原因在于a.h文件被包含了两次。为了避免同一个文件被包含多次,C/C++中有两种处理方式,一种是#ifndef方式,另一种是#pragma once方式。

方式1:

#ifndef __SOMEFILE_H__  
#define __SOMEFILE_H__  
... ... // 声明、定义语句  
#endif 

方式2:

#pragma once  
... ... // 声明、定义语句 

#pragma once方式一般由编译器提供,不受C/C++语言标准支持,GCC已经取消了对其的支持,而微软的VC++却仍在坚持。它保证同一个文件不会被包含多次。这里所说的“同一个文件”指的是物理上的一个文件,而不是指内容相同的两个文件。#pragma once声明只针对文件,而不能针对某一文件中的一段代码。这种方式避免了因想方设法定义一个独一无二的宏而产生的烦恼;另外,针对大型项目的编译速度也有了提升。参考

C/C++语言标准支持第一种方式。

#ifndef _PROJECT_PATH_FILE_H_  
#define _PROJECT_PATH_FILE_H_  
... ... // 声明、定义语句  
#endif

所有头文件都应该使用“头文件卫士” #define 来防止头文件被多重包含
为保证唯一性, 头文件的命名应该基于所在项目源代码树的全路径. 例如, 项目 foo 中的头文件 foo/src/bar/baz.h 可按如下方式保护:

#ifndef FOO_BAR_BAZ_H_
#define FOO_BAR_BAZ_H_#endif // FOO_BAR_BAZ_H_

重复定义的问题

chapter 3

chapter 4

chapter 5

chapter 6

chapter 7

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值