简单C++工程架构
来源:互联网 发布:如何查看电脑的端口号 编辑:程序博客网 时间:2024/06/16 12:18
简单C++工程架构
(在这里万分感谢万老师帮我打下的初步架构基础)
1. 项目结构
PlayAviVideo工程的整体目录结构就是这张图所显示的,这次用到的主要是头文件和源文件。头文件夹中放头文件定义,源文件中放源代码文件,其中main.cpp文件中是入口函数main,以及main函数对其他功能函数的调用。其他的cpp源文件是对头文件中声明函数的实现。
2. 头文件
头文件夹里包括一个头文件head.h,贴上代码
#ifndef HEAD_H#define HEAD_H#include "highgui.h"//1.播放一个视频int playAviVideo();//2.播放缩放后的视频int playScaleVideo();#endif
头文件中包括一个#ifndef组合,一个头文件的引用(#include"highgui.h")以及两个函数声明(int playAviVideo();int playScaleVideo();)。
2.1 #Ifndef组合:使用方式如下:
#ifndef 标识符
#define 标识符
内容
#endif
组合用于头文件中,防止当前头文件被重复引用,重复编译。举个栗子,
头文件a
#include <iostream>using namespace std;
头文件b
#include "a.h"#include <string>using namespace std;
源文件Demo.cpp
#include "a.h"#include "b.h"int main() {return 0;}
a.h引用了iostream头文件
b,h引用了a.h和string头文件
Demo.cpp引用了a和b两个头文件,然而头文件b中已经引用了头文件a(#include“a.h”),所以,此时,a头文件中的内容就被引用了两次。
代码量大的时候非常容易犯这种错误,那要如何避免这种情况呢?#ifndef!
#ifndef A_H
#define A_H
头文件内容
#endif
在ifndef结构中,标识符为自定义的一个符号,一般情况用当前头文件名的大写形式以示区分,比如a.h中标识符为A_H。如果当前头文件是第一次被编译,A_H肯定是没有被定义过的(#ifndef A_H),条件成立,那A_H则被定义一次(#define A_H),编译头文件内容,#endif与#ifndef对应,表示if结束;如果当前头文件已经被编译过,条件不成立,直接endif结束,不再编译头文件中的内容。
这样,就可以达到防止重复编译的目的。
2.2 #include
引入程序中需要用到的头文件
2.3 int playAviVideo();
头文件中预先声明函数,其定义根据功能不同放在不同源文件中,如果这里不声明,在main函数中引用时会报错—“无法识别的标识符”,因为main函数找不到playAviVideo函数在哪里。
3. 源文件-main.cpp
#include "head.h"int main() {//1.播放一个视频playAviVideo();//2.缩放视频后播放playScaleVideo();}
入口函数,引用自定义的head.h头文件,调用的playAviVideo和playScaleVideo函数在head.h中声明过,因此main函数可以找到其具体的函数定义。
4. 源文件-其他
以playAviVideo.cpp为例,在这个源文件中引用了head头文件,实现了head头文件中声明的int playAviVideo()函数定义,main函数执行时便可以到这个文件中找到playAviVideo函数的具体定义。
#include "head.h"#include <iostream>using namespace std;int playAviVideo() {cout << "playAviVideo"<<endl;return 0;}
- 简单C++工程架构
- vue-cli搭建Vue简单工程架构
- 简单创建ASPX(C#)工程
- C语言工程实践-简单文本编辑器
- Hibernate的基本架构和第一个简单工程(2)
- 一个简单的C/S 架构程序
- C/S架构和B/S架构的简单理解
- 最简单的C语言工程,汇编代码
- 设计模式 -- 策略模式 + 简单工程模式(C++)
- 简单使用GCC编译Keil下工程C文件
- C工程
- Android 程序工程架构
- GWT工程架构详解
- GWT工程架构详解
- iOS:工程架构
- 工程架构探讨
- android 工程架构
- GWT工程架构详解
- Android - 《Tasks and Back Stack》
- 计算几何——最大三角形【HDU2202】
- 音乐播放器中activity 与service 交互
- Sift算子特征点提取、描述及匹配全流程解析
- 升级xcode8加密失败的问题
- 简单C++工程架构
- 3-D Mapping With an RGB-D Camera粗译
- 从零开始写C# MVC框架之--- C# Redis 实现加添加测试项目
- MongoDB学习笔记:(2)、MongoDB主从复制
- 1212 无向图最小生成树
- 6.自己动手写Java Web框架-Model
- java中使用SAX生成XML文件
- C++之一个程序学懂链表
- 第四周项目3——单链表应用(1)