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

原创 2016年05月31日 22:23:38

【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

版权声明:本文为博主原创文章,未经博主允许不得转载。

骇客学院:你想一辈子只做个码农吗?

骇客学院:你想一辈子只做个码农吗?   前言: 但凡在互联网行业混了个三五年的人都知道,互联网是一个非常特殊的行业。混在这个行业的每个人都感觉既兴奋又不安。 兴奋的是你总能看到无数新奇的事物,...
  • iiehkxy
  • iiehkxy
  • 2015年08月04日 15:54
  • 90

做个犀利的码农:如何持续培养/更新自己的开发技能

我们的圈子,改变是生存的必备要素之一。计算机领域一直在改变,从基础框架到计算设备,还有几乎每天都涌现出的新技术,这些要求我们必须持续学习新东西。这里将介绍一些技巧,以使你可以在这从未停止的学习之旅更加...

做个犀利的码农:如何持续培养/更新自己的开发技能

我们的圈子,改变是生存的必备要素之一。计算机领域一直在改变,从基础框架到计算设备,还有几乎每天都涌现出的新技术,这些要求我们必须持续学习新东西。这里将为您介绍一些技巧,以使您在这从未停止的学习之旅更加...

C++ primer 学习笔记(一个学过谭老师的C++书籍, 并在一年间间断使用过C++的码农)

1. 如果表达式里既有带符号类型又有无符号类型, 那么带符号数会自动地转换成无符号数。由于size()函数返回的是一个无符号整数,故如果一条表达式中已经有了size()函数,就     不要再使用in...

C++码农要读的经典

今天刚大四,还在忙着找工作,读过的书不是很多,还有一些好书在读,还有一些书将来必读。 读过的书...

【C++码农】VC环境下DLL接口申明的三种方式

http://blog.csdn.net/supconsupcon/article/details/4345343 本文将介绍三种提供DLL接口的方式(对于如何编写DLL内部的代码不...

【C++码农】WMI技术介绍和应用——VC开发WMI应用的基本步骤

在《WMI技术介绍和应用——WMI概述》中介绍了我们可以使用C++、.net或者支持ActiveX技术的脚本语言来使用WMI。但是各种语言对WMI的控制能力是不同的,比如脚本语言只能用来从WMI获取数...

c/c++码农对go中包的错误理解

用现有的姿势去解锁新姿势的过程中会有写先入为主的错误,在解锁新姿势的过程中造成写麻烦。 最为一个自学go的c/c++码农,在简单扫过包这一概念时,直接把包理解成了.h文件。忽略了包的本质。由于go的...

【C++码农】阻止屏保运行、显示器和系统待机

http://blog.csdn.net/magictong/article/details/6560634     最近看了下电脑管家里面修复漏洞时阻止系统进入待机模式的实现,其实很简单,...

用Swift做个游戏Lecture 03 —— 实现foreground的持续移动

本文任务 游戏运行中,Foreground地面持续滚动。 持续移动地面任务一需要解决的问题: 如何移动地面。 如何无缝连接。 问题一的解决思路是每次渲染完毕进入update()方法中更新Foregro...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【C++ 学习】03 做个遵纪守法的码农
举报原因:
原因补充:

(最多只允许输入30个字)