函数的声明与定义

函数声明:
函数声明的作用是把函数的名字、类型以及形参类型、个数和顺序通知编译系统,以便在调用该函数时系统会按此进行对照检查(例如函数名是否正确,实参与形参的类型和个数是否一致)。

void add(int, int);

函数定义:
函数定义是指对函数功能的确立,包括指定函数名,函数值类型、形参类型、函数体等,它是一个完整的、独立的函数单位。其中包含了函数功能的实现代码。

void add(int a, int b) {return a + b;
}

一般我们写代码时会将函数的声明写在主程序之前,而将函数的定义写在主程序的后面,这样会增加代码的可读性。尤其当封装的函数较多较长时,读者可以跳过函数的定义直接阅读主函数,有时也可通过灵活的函数命名使读者可以大致了解函数的功能。

void add(int, int);int main() {add(1, 2);return 0;
}void add(int a, int b) {return a + b;
}

如果函数声明出现问题,将会在编译阶段就会发生如下的报错信息。

>> g++ -c add.c
error: ‘add’ was not declared in this scope add(1, 2);

如果函数定义出现问题,在没有语法错误的情况下,会通过编译过程,但会在链接过程报错。

>> g++ -c add.c #可以顺利通过编译生成add.o文件
>> g++ add.o #链接对象文件
error: 对‘add(int, int)’未定义的引用

下图是一个源程序最终变为可执行程序所要经过的步骤。

#mermaid-svg-gtaa6raClxLkpSdH .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-gtaa6raClxLkpSdH .label text{fill:#333}#mermaid-svg-gtaa6raClxLkpSdH .node rect,#mermaid-svg-gtaa6raClxLkpSdH .node circle,#mermaid-svg-gtaa6raClxLkpSdH .node ellipse,#mermaid-svg-gtaa6raClxLkpSdH .node polygon,#mermaid-svg-gtaa6raClxLkpSdH .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-gtaa6raClxLkpSdH .node .label{text-align:center;fill:#333}#mermaid-svg-gtaa6raClxLkpSdH .node.clickable{cursor:pointer}#mermaid-svg-gtaa6raClxLkpSdH .arrowheadPath{fill:#333}#mermaid-svg-gtaa6raClxLkpSdH .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-gtaa6raClxLkpSdH .flowchart-link{stroke:#333;fill:none}#mermaid-svg-gtaa6raClxLkpSdH .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-gtaa6raClxLkpSdH .edgeLabel rect{opacity:0.9}#mermaid-svg-gtaa6raClxLkpSdH .edgeLabel span{color:#333}#mermaid-svg-gtaa6raClxLkpSdH .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-gtaa6raClxLkpSdH .cluster text{fill:#333}#mermaid-svg-gtaa6raClxLkpSdH div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-gtaa6raClxLkpSdH .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-gtaa6raClxLkpSdH text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-gtaa6raClxLkpSdH .actor-line{stroke:grey}#mermaid-svg-gtaa6raClxLkpSdH .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-gtaa6raClxLkpSdH .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-gtaa6raClxLkpSdH #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-gtaa6raClxLkpSdH .sequenceNumber{fill:#fff}#mermaid-svg-gtaa6raClxLkpSdH #sequencenumber{fill:#333}#mermaid-svg-gtaa6raClxLkpSdH #crosshead path{fill:#333;stroke:#333}#mermaid-svg-gtaa6raClxLkpSdH .messageText{fill:#333;stroke:#333}#mermaid-svg-gtaa6raClxLkpSdH .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-gtaa6raClxLkpSdH .labelText,#mermaid-svg-gtaa6raClxLkpSdH .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-gtaa6raClxLkpSdH .loopText,#mermaid-svg-gtaa6raClxLkpSdH .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-gtaa6raClxLkpSdH .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-gtaa6raClxLkpSdH .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-gtaa6raClxLkpSdH .noteText,#mermaid-svg-gtaa6raClxLkpSdH .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-gtaa6raClxLkpSdH .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-gtaa6raClxLkpSdH .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-gtaa6raClxLkpSdH .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-gtaa6raClxLkpSdH .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-gtaa6raClxLkpSdH .section{stroke:none;opacity:0.2}#mermaid-svg-gtaa6raClxLkpSdH .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-gtaa6raClxLkpSdH .section2{fill:#fff400}#mermaid-svg-gtaa6raClxLkpSdH .section1,#mermaid-svg-gtaa6raClxLkpSdH .section3{fill:#fff;opacity:0.2}#mermaid-svg-gtaa6raClxLkpSdH .sectionTitle0{fill:#333}#mermaid-svg-gtaa6raClxLkpSdH .sectionTitle1{fill:#333}#mermaid-svg-gtaa6raClxLkpSdH .sectionTitle2{fill:#333}#mermaid-svg-gtaa6raClxLkpSdH .sectionTitle3{fill:#333}#mermaid-svg-gtaa6raClxLkpSdH .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-gtaa6raClxLkpSdH .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-gtaa6raClxLkpSdH .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-gtaa6raClxLkpSdH .grid path{stroke-width:0}#mermaid-svg-gtaa6raClxLkpSdH .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-gtaa6raClxLkpSdH .task{stroke-width:2}#mermaid-svg-gtaa6raClxLkpSdH .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-gtaa6raClxLkpSdH .taskText:not([font-size]){font-size:11px}#mermaid-svg-gtaa6raClxLkpSdH .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-gtaa6raClxLkpSdH .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-gtaa6raClxLkpSdH .task.clickable{cursor:pointer}#mermaid-svg-gtaa6raClxLkpSdH .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-gtaa6raClxLkpSdH .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-gtaa6raClxLkpSdH .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-gtaa6raClxLkpSdH .taskText0,#mermaid-svg-gtaa6raClxLkpSdH .taskText1,#mermaid-svg-gtaa6raClxLkpSdH .taskText2,#mermaid-svg-gtaa6raClxLkpSdH .taskText3{fill:#fff}#mermaid-svg-gtaa6raClxLkpSdH .task0,#mermaid-svg-gtaa6raClxLkpSdH .task1,#mermaid-svg-gtaa6raClxLkpSdH .task2,#mermaid-svg-gtaa6raClxLkpSdH .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-gtaa6raClxLkpSdH .taskTextOutside0,#mermaid-svg-gtaa6raClxLkpSdH .taskTextOutside2{fill:#000}#mermaid-svg-gtaa6raClxLkpSdH .taskTextOutside1,#mermaid-svg-gtaa6raClxLkpSdH .taskTextOutside3{fill:#000}#mermaid-svg-gtaa6raClxLkpSdH .active0,#mermaid-svg-gtaa6raClxLkpSdH .active1,#mermaid-svg-gtaa6raClxLkpSdH .active2,#mermaid-svg-gtaa6raClxLkpSdH .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-gtaa6raClxLkpSdH .activeText0,#mermaid-svg-gtaa6raClxLkpSdH .activeText1,#mermaid-svg-gtaa6raClxLkpSdH .activeText2,#mermaid-svg-gtaa6raClxLkpSdH .activeText3{fill:#000 !important}#mermaid-svg-gtaa6raClxLkpSdH .done0,#mermaid-svg-gtaa6raClxLkpSdH .done1,#mermaid-svg-gtaa6raClxLkpSdH .done2,#mermaid-svg-gtaa6raClxLkpSdH .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-gtaa6raClxLkpSdH .doneText0,#mermaid-svg-gtaa6raClxLkpSdH .doneText1,#mermaid-svg-gtaa6raClxLkpSdH .doneText2,#mermaid-svg-gtaa6raClxLkpSdH .doneText3{fill:#000 !important}#mermaid-svg-gtaa6raClxLkpSdH .crit0,#mermaid-svg-gtaa6raClxLkpSdH .crit1,#mermaid-svg-gtaa6raClxLkpSdH .crit2,#mermaid-svg-gtaa6raClxLkpSdH .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-gtaa6raClxLkpSdH .activeCrit0,#mermaid-svg-gtaa6raClxLkpSdH .activeCrit1,#mermaid-svg-gtaa6raClxLkpSdH .activeCrit2,#mermaid-svg-gtaa6raClxLkpSdH .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-gtaa6raClxLkpSdH .doneCrit0,#mermaid-svg-gtaa6raClxLkpSdH .doneCrit1,#mermaid-svg-gtaa6raClxLkpSdH .doneCrit2,#mermaid-svg-gtaa6raClxLkpSdH .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-gtaa6raClxLkpSdH .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-gtaa6raClxLkpSdH .milestoneText{font-style:italic}#mermaid-svg-gtaa6raClxLkpSdH .doneCritText0,#mermaid-svg-gtaa6raClxLkpSdH .doneCritText1,#mermaid-svg-gtaa6raClxLkpSdH .doneCritText2,#mermaid-svg-gtaa6raClxLkpSdH .doneCritText3{fill:#000 !important}#mermaid-svg-gtaa6raClxLkpSdH .activeCritText0,#mermaid-svg-gtaa6raClxLkpSdH .activeCritText1,#mermaid-svg-gtaa6raClxLkpSdH .activeCritText2,#mermaid-svg-gtaa6raClxLkpSdH .activeCritText3{fill:#000 !important}#mermaid-svg-gtaa6raClxLkpSdH .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-gtaa6raClxLkpSdH g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-gtaa6raClxLkpSdH g.classGroup text .title{font-weight:bolder}#mermaid-svg-gtaa6raClxLkpSdH g.clickable{cursor:pointer}#mermaid-svg-gtaa6raClxLkpSdH g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-gtaa6raClxLkpSdH g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-gtaa6raClxLkpSdH .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-gtaa6raClxLkpSdH .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-gtaa6raClxLkpSdH .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-gtaa6raClxLkpSdH .dashed-line{stroke-dasharray:3}#mermaid-svg-gtaa6raClxLkpSdH #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-gtaa6raClxLkpSdH #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-gtaa6raClxLkpSdH #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-gtaa6raClxLkpSdH #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-gtaa6raClxLkpSdH #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-gtaa6raClxLkpSdH #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-gtaa6raClxLkpSdH #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-gtaa6raClxLkpSdH #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-gtaa6raClxLkpSdH .commit-id,#mermaid-svg-gtaa6raClxLkpSdH .commit-msg,#mermaid-svg-gtaa6raClxLkpSdH .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-gtaa6raClxLkpSdH .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-gtaa6raClxLkpSdH .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-gtaa6raClxLkpSdH g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-gtaa6raClxLkpSdH g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-gtaa6raClxLkpSdH g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-gtaa6raClxLkpSdH g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-gtaa6raClxLkpSdH g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-gtaa6raClxLkpSdH g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-gtaa6raClxLkpSdH .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-gtaa6raClxLkpSdH .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-gtaa6raClxLkpSdH .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-gtaa6raClxLkpSdH .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-gtaa6raClxLkpSdH .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-gtaa6raClxLkpSdH .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-gtaa6raClxLkpSdH .edgeLabel text{fill:#333}#mermaid-svg-gtaa6raClxLkpSdH .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-gtaa6raClxLkpSdH .node circle.state-start{fill:black;stroke:black}#mermaid-svg-gtaa6raClxLkpSdH .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-gtaa6raClxLkpSdH #statediagram-barbEnd{fill:#9370db}#mermaid-svg-gtaa6raClxLkpSdH .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-gtaa6raClxLkpSdH .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-gtaa6raClxLkpSdH .statediagram-state .divider{stroke:#9370db}#mermaid-svg-gtaa6raClxLkpSdH .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-gtaa6raClxLkpSdH .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-gtaa6raClxLkpSdH .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-gtaa6raClxLkpSdH .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-gtaa6raClxLkpSdH .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-gtaa6raClxLkpSdH .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-gtaa6raClxLkpSdH .note-edge{stroke-dasharray:5}#mermaid-svg-gtaa6raClxLkpSdH .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-gtaa6raClxLkpSdH .error-icon{fill:#522}#mermaid-svg-gtaa6raClxLkpSdH .error-text{fill:#522;stroke:#522}#mermaid-svg-gtaa6raClxLkpSdH .edge-thickness-normal{stroke-width:2px}#mermaid-svg-gtaa6raClxLkpSdH .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-gtaa6raClxLkpSdH .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-gtaa6raClxLkpSdH .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-gtaa6raClxLkpSdH .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-gtaa6raClxLkpSdH .marker{fill:#333}#mermaid-svg-gtaa6raClxLkpSdH .marker.cross{stroke:#333}:root { --mermaid-font-family: "trebuchet ms", verdana, arial;}#mermaid-svg-gtaa6raClxLkpSdH {color: rgba(0, 0, 0, 0.75);font: ;}

cpp
待编译程序
生成
源程序
预处理
编译
对象文件.o文件
若干对象文件进行链接
可执行程序a.out

预处理阶段会将所有引入的头文件和定义的宏进行展开,编译阶段检查代码是否存在语法错误,如果函数未声明,则会在编译阶段报错。每一个源程序最终会生成一个对象文件,最终需要将所有的对象文件进行链接,如果函数未定义,则在链接的过程中,函数在调用的时候找不到函数定义,则会发生报错。

工程文件规范

一般简单的程序通过上面介绍的代码格式是没有问题的。但当代码量很大时,比如有很多人共同开发一个项目,就需要每个人有自己的负责部分,并在最后将所有人的部分结合形成一个完整的可以提供某些功能的模块。这就需要将函数的声明与定义分开处理。

一般分为以下几个步骤

  1. 将所有的函数声明放到头文件(.h)中

打开一个头文件,通常有以下几条语句

#ifndef _文件名_H//如果打开时没有特殊的宏的话,则视为第一次包含,执行下面内容
#define _文件名_H//如果当前没有定义该宏,则定义这个宏
//在这里插入函数的声明
#endif
//这段代码的目的是避免在一次编译中的头文件被重复包含
  1. 将所有的函数定义放到相应源文件(.cpp)中

这里最好是将一个函数定义的源文件与对应的头文件命名相同,便于清晰的了解头文件和源文件的对应关系。
源文件(包括主函数文件)中需要包含文件中使用函数所在的头文件

#include <***.h>//是在系统包含的路径中进行查找
#include "***.h"//是在当前目录中进行查找
//include的作用实际上是将.h文件中的内容拷贝一份

如果想把自己的.h文件也可以使用<>引入,只需要将自己的头文件所在的目录添加到系统查找的目录中去,编译时需要做如下处理。

g++ -I头文件所在目录
g++  -I./ #头文件在当前目录的情况下,将当前目录添加到系统头文件的查找路径当中
  1. 编译所有的源文件生成对象文件
g++ -c -I./ *.cpp
  1. 链接所有的对象文件
g++ *.o
  1. 生成可执行文件a.out
./a.out

静态链接库
静态链接库的作用是把函数的定义和声明分开处理,把所有的定义打成一个包。

ar -r libhello.a *.o #生成静态链接库libhello.a,这个名字可以任意取,注意前缀为lib即可
  • 在项目文件夹下创建一个module文件夹,将所有的.h、.cpp、.o文件移动到该文件夹下;
mkdir module
mv header* moudle/ #假设所有的文件(除主程序)都以header开头
  • 在module文件夹下创建include文件夹,将所有的.h文件放在该文件夹下
mkdir include
mv header*.h include/
  • 在module文件夹下创建src文件夹,将所有的.cpp文件移动到该文件夹下
mkdir src
mv header*.cpp src/
  • 在module文件夹下创建lib文件夹,准备将静态链接库生成在该文件夹下
mkdir lib
  • 生成静态链接库

进入src目录下,编译所有的.cpp文件生成相应对象文件

g++ -I../include *.cpp

打包所有的对象文件生成静态链接库libhello.a

ar -r libhello.a *.o

将静态链接库移动到lib文件夹下

cd ../lib/

下面的目录结构更直观的表现了以上的操作流程:

#mermaid-svg-2zmjaOPWN7IavyrU .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-2zmjaOPWN7IavyrU .label text{fill:#333}#mermaid-svg-2zmjaOPWN7IavyrU .node rect,#mermaid-svg-2zmjaOPWN7IavyrU .node circle,#mermaid-svg-2zmjaOPWN7IavyrU .node ellipse,#mermaid-svg-2zmjaOPWN7IavyrU .node polygon,#mermaid-svg-2zmjaOPWN7IavyrU .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-2zmjaOPWN7IavyrU .node .label{text-align:center;fill:#333}#mermaid-svg-2zmjaOPWN7IavyrU .node.clickable{cursor:pointer}#mermaid-svg-2zmjaOPWN7IavyrU .arrowheadPath{fill:#333}#mermaid-svg-2zmjaOPWN7IavyrU .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-2zmjaOPWN7IavyrU .flowchart-link{stroke:#333;fill:none}#mermaid-svg-2zmjaOPWN7IavyrU .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-2zmjaOPWN7IavyrU .edgeLabel rect{opacity:0.9}#mermaid-svg-2zmjaOPWN7IavyrU .edgeLabel span{color:#333}#mermaid-svg-2zmjaOPWN7IavyrU .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-2zmjaOPWN7IavyrU .cluster text{fill:#333}#mermaid-svg-2zmjaOPWN7IavyrU div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-2zmjaOPWN7IavyrU .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-2zmjaOPWN7IavyrU text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-2zmjaOPWN7IavyrU .actor-line{stroke:grey}#mermaid-svg-2zmjaOPWN7IavyrU .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-2zmjaOPWN7IavyrU .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-2zmjaOPWN7IavyrU #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-2zmjaOPWN7IavyrU .sequenceNumber{fill:#fff}#mermaid-svg-2zmjaOPWN7IavyrU #sequencenumber{fill:#333}#mermaid-svg-2zmjaOPWN7IavyrU #crosshead path{fill:#333;stroke:#333}#mermaid-svg-2zmjaOPWN7IavyrU .messageText{fill:#333;stroke:#333}#mermaid-svg-2zmjaOPWN7IavyrU .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-2zmjaOPWN7IavyrU .labelText,#mermaid-svg-2zmjaOPWN7IavyrU .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-2zmjaOPWN7IavyrU .loopText,#mermaid-svg-2zmjaOPWN7IavyrU .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-2zmjaOPWN7IavyrU .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-2zmjaOPWN7IavyrU .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-2zmjaOPWN7IavyrU .noteText,#mermaid-svg-2zmjaOPWN7IavyrU .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-2zmjaOPWN7IavyrU .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-2zmjaOPWN7IavyrU .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-2zmjaOPWN7IavyrU .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-2zmjaOPWN7IavyrU .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-2zmjaOPWN7IavyrU .section{stroke:none;opacity:0.2}#mermaid-svg-2zmjaOPWN7IavyrU .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-2zmjaOPWN7IavyrU .section2{fill:#fff400}#mermaid-svg-2zmjaOPWN7IavyrU .section1,#mermaid-svg-2zmjaOPWN7IavyrU .section3{fill:#fff;opacity:0.2}#mermaid-svg-2zmjaOPWN7IavyrU .sectionTitle0{fill:#333}#mermaid-svg-2zmjaOPWN7IavyrU .sectionTitle1{fill:#333}#mermaid-svg-2zmjaOPWN7IavyrU .sectionTitle2{fill:#333}#mermaid-svg-2zmjaOPWN7IavyrU .sectionTitle3{fill:#333}#mermaid-svg-2zmjaOPWN7IavyrU .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-2zmjaOPWN7IavyrU .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-2zmjaOPWN7IavyrU .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-2zmjaOPWN7IavyrU .grid path{stroke-width:0}#mermaid-svg-2zmjaOPWN7IavyrU .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-2zmjaOPWN7IavyrU .task{stroke-width:2}#mermaid-svg-2zmjaOPWN7IavyrU .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-2zmjaOPWN7IavyrU .taskText:not([font-size]){font-size:11px}#mermaid-svg-2zmjaOPWN7IavyrU .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-2zmjaOPWN7IavyrU .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-2zmjaOPWN7IavyrU .task.clickable{cursor:pointer}#mermaid-svg-2zmjaOPWN7IavyrU .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-2zmjaOPWN7IavyrU .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-2zmjaOPWN7IavyrU .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-2zmjaOPWN7IavyrU .taskText0,#mermaid-svg-2zmjaOPWN7IavyrU .taskText1,#mermaid-svg-2zmjaOPWN7IavyrU .taskText2,#mermaid-svg-2zmjaOPWN7IavyrU .taskText3{fill:#fff}#mermaid-svg-2zmjaOPWN7IavyrU .task0,#mermaid-svg-2zmjaOPWN7IavyrU .task1,#mermaid-svg-2zmjaOPWN7IavyrU .task2,#mermaid-svg-2zmjaOPWN7IavyrU .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-2zmjaOPWN7IavyrU .taskTextOutside0,#mermaid-svg-2zmjaOPWN7IavyrU .taskTextOutside2{fill:#000}#mermaid-svg-2zmjaOPWN7IavyrU .taskTextOutside1,#mermaid-svg-2zmjaOPWN7IavyrU .taskTextOutside3{fill:#000}#mermaid-svg-2zmjaOPWN7IavyrU .active0,#mermaid-svg-2zmjaOPWN7IavyrU .active1,#mermaid-svg-2zmjaOPWN7IavyrU .active2,#mermaid-svg-2zmjaOPWN7IavyrU .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-2zmjaOPWN7IavyrU .activeText0,#mermaid-svg-2zmjaOPWN7IavyrU .activeText1,#mermaid-svg-2zmjaOPWN7IavyrU .activeText2,#mermaid-svg-2zmjaOPWN7IavyrU .activeText3{fill:#000 !important}#mermaid-svg-2zmjaOPWN7IavyrU .done0,#mermaid-svg-2zmjaOPWN7IavyrU .done1,#mermaid-svg-2zmjaOPWN7IavyrU .done2,#mermaid-svg-2zmjaOPWN7IavyrU .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-2zmjaOPWN7IavyrU .doneText0,#mermaid-svg-2zmjaOPWN7IavyrU .doneText1,#mermaid-svg-2zmjaOPWN7IavyrU .doneText2,#mermaid-svg-2zmjaOPWN7IavyrU .doneText3{fill:#000 !important}#mermaid-svg-2zmjaOPWN7IavyrU .crit0,#mermaid-svg-2zmjaOPWN7IavyrU .crit1,#mermaid-svg-2zmjaOPWN7IavyrU .crit2,#mermaid-svg-2zmjaOPWN7IavyrU .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-2zmjaOPWN7IavyrU .activeCrit0,#mermaid-svg-2zmjaOPWN7IavyrU .activeCrit1,#mermaid-svg-2zmjaOPWN7IavyrU .activeCrit2,#mermaid-svg-2zmjaOPWN7IavyrU .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-2zmjaOPWN7IavyrU .doneCrit0,#mermaid-svg-2zmjaOPWN7IavyrU .doneCrit1,#mermaid-svg-2zmjaOPWN7IavyrU .doneCrit2,#mermaid-svg-2zmjaOPWN7IavyrU .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-2zmjaOPWN7IavyrU .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-2zmjaOPWN7IavyrU .milestoneText{font-style:italic}#mermaid-svg-2zmjaOPWN7IavyrU .doneCritText0,#mermaid-svg-2zmjaOPWN7IavyrU .doneCritText1,#mermaid-svg-2zmjaOPWN7IavyrU .doneCritText2,#mermaid-svg-2zmjaOPWN7IavyrU .doneCritText3{fill:#000 !important}#mermaid-svg-2zmjaOPWN7IavyrU .activeCritText0,#mermaid-svg-2zmjaOPWN7IavyrU .activeCritText1,#mermaid-svg-2zmjaOPWN7IavyrU .activeCritText2,#mermaid-svg-2zmjaOPWN7IavyrU .activeCritText3{fill:#000 !important}#mermaid-svg-2zmjaOPWN7IavyrU .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-2zmjaOPWN7IavyrU g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-2zmjaOPWN7IavyrU g.classGroup text .title{font-weight:bolder}#mermaid-svg-2zmjaOPWN7IavyrU g.clickable{cursor:pointer}#mermaid-svg-2zmjaOPWN7IavyrU g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-2zmjaOPWN7IavyrU g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-2zmjaOPWN7IavyrU .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-2zmjaOPWN7IavyrU .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-2zmjaOPWN7IavyrU .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-2zmjaOPWN7IavyrU .dashed-line{stroke-dasharray:3}#mermaid-svg-2zmjaOPWN7IavyrU #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-2zmjaOPWN7IavyrU #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-2zmjaOPWN7IavyrU #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-2zmjaOPWN7IavyrU #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-2zmjaOPWN7IavyrU #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-2zmjaOPWN7IavyrU #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-2zmjaOPWN7IavyrU #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-2zmjaOPWN7IavyrU #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-2zmjaOPWN7IavyrU .commit-id,#mermaid-svg-2zmjaOPWN7IavyrU .commit-msg,#mermaid-svg-2zmjaOPWN7IavyrU .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-2zmjaOPWN7IavyrU .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-2zmjaOPWN7IavyrU .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-2zmjaOPWN7IavyrU g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-2zmjaOPWN7IavyrU g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-2zmjaOPWN7IavyrU g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-2zmjaOPWN7IavyrU g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-2zmjaOPWN7IavyrU g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-2zmjaOPWN7IavyrU g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-2zmjaOPWN7IavyrU .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-2zmjaOPWN7IavyrU .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-2zmjaOPWN7IavyrU .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-2zmjaOPWN7IavyrU .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-2zmjaOPWN7IavyrU .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-2zmjaOPWN7IavyrU .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-2zmjaOPWN7IavyrU .edgeLabel text{fill:#333}#mermaid-svg-2zmjaOPWN7IavyrU .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-2zmjaOPWN7IavyrU .node circle.state-start{fill:black;stroke:black}#mermaid-svg-2zmjaOPWN7IavyrU .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-2zmjaOPWN7IavyrU #statediagram-barbEnd{fill:#9370db}#mermaid-svg-2zmjaOPWN7IavyrU .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-2zmjaOPWN7IavyrU .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-2zmjaOPWN7IavyrU .statediagram-state .divider{stroke:#9370db}#mermaid-svg-2zmjaOPWN7IavyrU .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-2zmjaOPWN7IavyrU .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-2zmjaOPWN7IavyrU .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-2zmjaOPWN7IavyrU .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-2zmjaOPWN7IavyrU .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-2zmjaOPWN7IavyrU .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-2zmjaOPWN7IavyrU .note-edge{stroke-dasharray:5}#mermaid-svg-2zmjaOPWN7IavyrU .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-2zmjaOPWN7IavyrU .error-icon{fill:#522}#mermaid-svg-2zmjaOPWN7IavyrU .error-text{fill:#522;stroke:#522}#mermaid-svg-2zmjaOPWN7IavyrU .edge-thickness-normal{stroke-width:2px}#mermaid-svg-2zmjaOPWN7IavyrU .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-2zmjaOPWN7IavyrU .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-2zmjaOPWN7IavyrU .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-2zmjaOPWN7IavyrU .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-2zmjaOPWN7IavyrU .marker{fill:#333}#mermaid-svg-2zmjaOPWN7IavyrU .marker.cross{stroke:#333}:root { --mermaid-font-family: "trebuchet ms", verdana, arial;}#mermaid-svg-2zmjaOPWN7IavyrU {color: rgba(0, 0, 0, 0.75);font: ;}

project
main.cpp
a.out
moudle
include-存.h文件
src-存.cpp文件和.o文件
lib-静态链接库
header1.h
header2.h
header1.cpp
header1.o
header2.cpp
header2.o
libhello.a

提供给他人进行使用时,只需要提供静态链接库(lib文件夹)和头文件(include文件夹)即可。

写主程序时只需要引入相应的头文件,然后执行下面的命令:

g++ -I./module/include -L ./module/lib main.cpp -l hello
#-L添加静态链接库路径 -l后面加具体静态链接库名
./a.out
End

工程文件规范(Linux版;C++语言)相关推荐

  1. Linux解压torrent文件命令,linux版uTorrent安装手记

    PT资源需要用uTorrent来下载,而原来uTorrent只有windows版本.我的NAS下载机安装的是linux系统,没有相应版本 的uTorrent可以使用,让人比较纠结.网上也有介绍使用wi ...

  2. c语言open函数打开文件方式,Linux中C语言open函数打开或创建文件详细讲解

    Linux中C语言open函数打开或创建文件详细讲解 Linux中C语言open函数打开或创建文件详细讲解 头文件: #include #include #include 函数原型: int open ...

  3. 火狐linux版更改语言,Selenium更改firefox浏览器语言python m

    我花了3个小时试图找到这个问题的解决方案,但我还远远没有得到我觉得必须要问的答案.(我发现了类似的帖子-下面是我为什么要问这些帖子的解释) 我正在写一个程序,在谷歌中输入几个搜索词,然后检索我页面的排 ...

  4. 火狐linux版更改语言,修改Firefox火狐语言 添加火狐语言包的方法

    有时候我们使用测试版,或者类似于水狐等修改版的时候,默认是英语,用惯了中文,我们使用起来会有一些不习惯,不过我们可以手动安装语言包,将语言变更为中文 下面以水狐为例 1.首先是下载语言包,我们使用的是 ...

  5. linux c 判断文件打开文件,Linux 用C语言判断文件和文件夹

    Linux 用C语言判断文件和文件夹 #include #include #include #include int access(const char *pathname, int mode); i ...

  6. linux环境c语言编程 蔡晋,Linux环境C语言编程

    Linux环境C语言编程第1讲linux系统环境介绍 Linux环境C语言编程第2讲命令行解析+环境变量+gcc基本参数 Linux环境C语言编程第3讲共享库.gdb的使用 Linux环境C语言编程第 ...

  7. 文件Md5计算(C语言版)

    文件Md5计算(C语言版) 这是一个参考了网上很多人的C语言以及C++版本的计算工具而制作的,已对其优化了一部分,加了新功能:如果能计算出有效的Md5则自动复制到剪贴板,并且支持拖拽文件到窗口上,完全 ...

  8. c语言工程文文件作用是什么,ccs工程文件类型和作用

    ccs工程文件类型和作用 [复制链接] 本帖最后由 Jacktang 于 2018-8-19 22:20 编辑 CCS建立一个完整的工程,至少需要以下4个文件:存储器分配cmd文件.C语言系统库rts ...

  9. c语言字符型头文件,C语言头文件大全Word版

    <C语言头文件大全Word版>由会员分享,可在线阅读,更多相关<C语言头文件大全Word版(7页珍藏版)>请在人人文库网上搜索. 1.传播优秀Word版文档 ,希望对您有帮助, ...

最新文章

  1. PC端微信小程序wxapkg解密
  2. 教育学专硕考试科目计算机,2017考研:哪些专业的考试科目相同?
  3. 第 17 章 Native SQL查询
  4. Oracle 原理:数据装载 ,SQLldr ,外部表
  5. iOS中安全结束 子线程 的方法
  6. CANVAS运用-对图片的压缩上传(仅针对移动浏览器)
  7. 【clickhouse】clickhouse 大表删除 Size 256G is greater than max_[table/partition]_size_to_drop 50GB
  8. jQuery实现轮播图--入门
  9. java mp3 信息_如何用Java读取MP3文件的Tag信息
  10. 【bootstrap】-----使用核心
  11. qt 隐藏控制台_QT去掉CONSOLE | 学步园
  12. CCRC和ISO27001有什么区别?
  13. 如何解决DNS解析错误
  14. BZOJ 3097: Hash Killer I【构造题,思维题】
  15. 浅谈快速沃尔什变换(FWT)快速莫比乌斯变换(FMT)
  16. 精密划片机在钽酸锂晶圆切割案例
  17. 题目内容: 班级第一次列队,通常老师会让同学按身高排成一列,然后1、2报数,喊到1的同学向前一 步,就这样,队伍就变成两列了。假设现在一个班级有n个同学,并且他们已经按身高排成 了一列,同学按身高从1
  18. 阿里云域名配置过程记录
  19. https证书怎么申请?
  20. 去哪儿网首页分析 Home.vue

热门文章

  1. PartyOK酒吧游戏实用手册
  2. 绿色版,便携版,破解版,精简版区别
  3. Ubuntu18.04使用锐捷登录校园网
  4. 【源码定制】移植Youpk到Android 13.0 (Pixel4)【未完成】
  5. java封装dll文件_java类封装成dll
  6. 薄饼核心函数swapExactTokensForTokens
  7. 写完这段代码,就被开除了……
  8. 文件服务器 小文件,小型文件服务器
  9. 记录repast4py的前两个example——rndWalker和Rumer Agent
  10. 一个牛人给Java初学者的建议(必看篇)