C++程序开发的基本概念

一个C++程序的开发需要经过以下的步骤:编辑、编译、连接、运行调试。再具体一些就是:源代码→预处理器→编译器→目标代码→链接器→可执行程序。

1、源代码:源程序是指未编译的按照一定的程序设计语言规范书写的文本文件。在C++中,存储源代码的文件.cpp文件。

2、预处理器:C预处理器是C/C++程序的宏预处理器(macro preprocessor),其主要功能是头文件的包含(including files)、宏替换(macro expansion)、条件编译(conditional compilation)、行控制(line contral)。

(1)源文件包含(including files)

文件包含指令将某个文件的内容插入到该#include处。

常见的文件包含格式:

A、#include <filename>:在标准编译器包含目录中查找filename文件;

B、#include "filename":现在当前源文件目录中查找,若未找到,再到标准目录中查找。

为了避免多重包含(double inclusion),#include命令常常被强制同#include guard或者#pragma once一起使用。

例如:

文件grandfather.h

struct foo {
    int menber;
};

文件 father.h

#include "grandfather.h"

文件 child.c

#include "grandfather.h"
#include "father.h"

此时,grandfather.h文件被包含两次,由于结构体foo被定义两次,将会造成编译错误。解决该问题的办法:

A、使用#include guards

将grandfather.h修改为:

#ifndef GRANDFATHER_H
#define GRANDFATHER_H
    struct foo {
      int member;
    };
#endif /*GRANDFATHER_H*/

B、使用#pragma once

将grandfather.h修改为:

#pragma once
struct foo {
    int member;
};

(2)条件编译

由#if、#ifdef、#ifndef开始,然后0-n个#elif,接着0-1个#else,最后跟#endif。当#if、#ifdef、#ifndef后面的条件表达式为真时,对代码进行编译,其控制逻辑跟if-else语句一样。

例如:

#include <iostream>
using namespace std;

#define A 2

int main()
{
    #ifdef A
    cout << "Yes" << endl;
    #else
    cout << "No" << endl;
    #endif
}

程序的运行结果是“Yes”,当注释掉A的宏定义后,运行结果为"No"。

(3)宏定义

宏定义有两种类型:object-like和function-like,也就是我们常说的简单宏定义和带参数的宏定义。

A、简单的宏定义

#define <identifier> <replacement token list>

例如:

#define PI 3.1415

B、带参数的宏定义

#define <identifier>(<parameter list>) <replacement token list>

例如:

#define Squre(r) (3.14*r*r)

其他的预处理中还有行控制、用户自定义错误。

参考文献:

[1] http://en.wikipedia.org/wiki/C_preprocessor;

[2] http://www.th7.cn/Program/cp/201403/182079.shtml.

时间: 2024-08-30 05:55:07

C++程序开发的基本概念的相关文章

MFC Windows程序开发究竟是什么?

MFC Windows程序开发究竟是什么? MFC是一个Application Framework.他是一个完整的程序模型. 什么是MFC?MFC是微软公司出品一个Application Framework.基本上,我们可以认为Application Framework就是一个完整的程序模型,具备标准软件所需的一切基本功能,比如文件存取.打印等等.从C++语言层面来看,Application Framework就是有一整套组合好的“对象”构建起来的模型.从C++语法上来说,MFC就是一套微软提供

如何在程序开发项目中选择合适的 JavaScript 框架,节省时间和成本的9款极佳的JavaScript框架介绍

从技术上来看,iOS,Android 和 Windows Phone 上的移动应用是使用不同的程序语言开发的,iOS 应用使用 Objective-C,Android 应用使用 Java,而 Windows Phone 应用使用 .NET. .随着 JavaScript,CSS 和 HTML 知识技能的提升,相信你也可以构建一个超赞的移动应用.在这篇博客里,我们将会介绍一些极好的 JavaScript 移动应用程序开发框架. 说到网络开发,就不得不说 JavaScript,这是一款很有前途的程序

微信小程序开发类型有哪些?

广州微信小程序开发公司(www.dthulian.com)品向科技表示,随着现在的互联网最热门话题,应该是微信小程序开发.那么我们就和大家来探讨下微信小程序开发类型有哪些? 首先微信小程序是什么? 微信小程序是由微信之父张小龙提出的一个概念,小程序是一种不需要下载安装就可以使用的应用,它实现了触手可及的梦想,用户只需扫一扫或者搜一下就可以打开应用.也体现了用完即走的理念,用户不用关心是否安装太多应用的问题,应用将无处不在,应用将随时可用,但又无需考虑安装及卸载. 对用户来讲,小程序可以实现"用完

杭州微信应用号小程序开发解决方案

杭州微信应用号小程序开发[金华腾云科技]微信应用号小程序(应用号)就是用户关注了一个应用号,就像安装了一个App一样.这样微信将被打造成一个全新的appstore,而每一个应用号就是一个个的webapp. 怎么理解这个概念? 下载安装app 太麻烦了,微信的小程序就可以满足你;安装 / 卸载 / 使用小程序,就像关注 / 取关 /进入公众号一样简单;你用完就可以走,不用担心装个 app 占你空间. 杭州微信应用号小程序(应用号)有几个功能? 1.微信应用号小程序(应用号)能实现对App个性功能的

Android开发涉及有点概念&amp;相关知识点(待写)

前言,承接之前的 IOS开发涉及有点概念&相关知识点,这次归纳的是Android开发相关,好废话不说了.. 先声明下,Android开发涉及概念比IOS杂很多,可能有很多都题不到的.. 首先由于Android是基于Linux,而Linux又是用c山寨Unix的,但是为什么Android不用开发App,其实我也不懂,我想可能是java比较简单. 同样的,IOS为啥没用java,这个我也想可能是因为IOS是封闭的吧..晕,又废话了..好,开始吧,不过这次很多要查资料了,很多名词.单词不会啊! 首先还

【微信小程序开发?系列文章六】生命周期和路由

这篇文章理论的知识比较多一些,都是个人观点,描述有失妥当的地方希望读者指出. [微信小程序开发•系列文章一]入门 [微信小程序开发•系列文章二]视图层 [微信小程序开发•系列文章三]数据层 [微信小程序开发•系列文章四]模块化 [微信小程序开发•系列文章五]主界面 [微信小程序开发•系列文章六]生命周期和路由 整个微信小程序从打开到关闭,整个过程可以分为很多阶段或者说状态,这一整段的过程,我们称之为小程序的生命周期.而周期中的每种不同的状态,到另一个状态的过度和转化,是需要一个触发机制的,这种机

[email&#160;protected]_Course_LabVIEW+MySQL程序开发

LabVIEW+MySQL程序开发 大数据时代,LabVIEW程序开发怎么能少了数据库这一强大的工具,然而大多数的LabVIEW工程师对于数据库的概念了解比较少,所以本课程重点介绍如何利用MySQL,让自己的程序上升一个档次. 首先,如果想要设计一个复杂的大型程序,必不可少的即数据库的支持,纵观众多的数据库,MySQL以其免费和操作简单,支持互联网和局域网访问等众多特性,成为了数据库设计的首选.本节主要介绍数据库的安装问题和数据库操作. 第一步:下载MySQL环境,百度搜索MySQL,在官网中我

#读书笔记#温伯格技术思想三部曲:程序开发心理学——第10章、积极性、培训及经验

在心理学家的眼中,人们在完成特定任务时的工作绩效,是由任务本身及其承担者对任务理解的深度共同决定的.心理学家同样认为,工作绩效同时也受到任务承担者个体在诸如性格和智力等方面差异的影响.尽管性格是可以改变的,而且智力也可以有所提高,但是工作绩效的实质提高还要依赖于培训和实践经验. 不过心理学本身并非一门严密的科学,而且也从来没有严密过.无论心理学家如何对任务及其承担者的理解深度进行考察,无论他们如何对任务承担者个体之间所有差异进行衡量,无论他们如何考虑到培训与实践经验,工作绩效总还是有很多方面无从

程序开发心理学阅读笔记之二

程序被写成什么样子,取决于众多的因素:一旦我们真的阅读了程序,就会发现无论是否必要,其中这些代码之所以如此编写,有的是由于计算机的局限,有的是由于程序语言的局限,有的是由于程序员的局限,有的是因为历史的偶然,而有的则可能是因为规范.但是,不管究竟是什么原因是最终的软件加入了某段特定的代码,这种原因必然有其基于心理学的一面.这使我们相信,把程序开发作为一项以人为主的活动来加以研究,将会取得丰硕的成果.----这也使得我相信,温伯格将程序开发和心理学结合起来研究,并不是毫无道理的. 如果准备把程序开