C++入门基础01

如何理解 函数 和 数组之间的关系(映射)

函数和数组都是一种映射,可参考数学基础f(x) 来理解,数组的映射为角标对应位置元素中的值,可理解前者为程序计算概念,后者为空间概念

c++ 编译 链接过程

g++ xxx.cpp (编译+链接)

a)如何得到.cpp 的对象文件
g++ -c xxx.cpp

b)怎么查看编译生成的对象文件
ll (linux 查看文件 类 ls 指令,但能查看 执行/权限/文件名/时间/大小)

c)查看对象文件内容
nm -C xxx.o (查看对象文件中申明的函数指令)

总结:函数前有数字则表明当前函数的定义是存在当前对象文件中的编译 (语法检查)+ 链接(符号链接,定义查找)

QA:
x.c / xx.cc 和 xxx.cpp 的关系
(.c 为c的源程序,.cpp为c++的源程序)
而 .cpp 和 .cc 的关系 [android 中c++ 为 .cc]
OS 后缀名
非UNIX 系统中 .cpp
Unix 系统中常用 .cc
xx.cc 中存在 xxx.cpp 中申明函数的函数定义,则xxx.cpp 文件在编译后执行链接时需要依赖前者实现最终的链接,否则链接失败

(可重复查看对应对象文件中的 函数声明)nm -C xx.o / xxx.o

编译源文件生成对象文件

g++ -c xxx.cpp
g++ -c xx.cc

编译完成后将xx.o文件链接到xxx.o文件(xxx.o依赖xx.o文件)

g++ xxx.o xx.o

执行程序

./a.out (默认产生的文件名)
(… 得到代码执行和结果)

链接中出现的问题和错误说明:

Note:【对于include 的系统库 ,系统会帮助完成链接工作,自申明的方法需要按照上面的流程完成补充定义并关联链接成为整体】
Nm -C /.a.out (除了可以看 .o 对象文件中的方法之外,还可以看可执行程序中的内容)
【未申明的函数 在文件编译过程中就会报错 undeclared identifier ‘xxx’】

链接两个文件中如果存在相同的函数定义,则会出现 符号重定义

duplicate symbol in:  
xxx.o

xx.o 【如果申明后在链接时没有找到方法的定义以及 有定义但多对象文件出现重复方法定义均会在链接时期报错】

通过上述内容以上弄清了 什么是定义,什么是申明,此外为什么要 将 定义和申明分开?
定义是作用在链接阶段,申明是作用在编译阶段,申明是为了帮助程序通过编译阶段的语法检查,定义是为了帮助程序在链接时能够正确找到对应的语法匹配程序,
在具体程序里,会存在头文件和源文件的分开实现,这里会将定义放在源文件(.c/.cc/.cpp)中,申明放在头文件(.h)中,分开是因为两者作用的阶段不一样,头文件是辅助其他源文件通过编译阶段,如果将定义写在头文件中,再通过include到其他源文件后在链接时会产生duplicate symbol 符号重定义 的链接报错

如何理解自定义的c 源码在使用三方框架时的运行原理?

自定义的c源码要想生成最终的可执行程序需要通过前面描述的 编译 + 链接 两个阶段,使用三方框架提供的功能要想我们自定义的源代码通过编译阶段,则需要单独依赖一套三方框架提供功能的头文件申明功能api
当自定义的源代码通过编译生成目标文件在执行链接时,因为使用了三方框架提供的功能,需要将三方模块的功能(定义模块)整合进来,这个整合进来的功能模块通常是以通过链接或通过对象文件的压缩打包可以生成库文件[这里指静态库文件(.a)],最终和我们源码生成的中间文件链接才能生成最终的 可执行程序

整合三方库过程:

1.根据三方库的cmake文件 make 定义库文件提供给依赖方使用

举例下载google 的 gtest 库代码来操作,
库中会有CmakeLists.txt(前提是当前os中安装有 cmake的运行环境)
进入目录cd build/
在当前目录结构下执行 cmake ../ (会在上一级目录中找到 CMakeLists.txt 文件执行)
重点会生成Makefile
执行 make (会在lib中生成三方库的定义库文件  链接生成.a库文件)
makefile.png

2.结合自定义的源码文件完成编译+链接过程阶段

在 include文件夹中会有依赖三方库的  头文件(即申明部分)

将前面的静态库文件和  头文件 cp 到  自身定义的源文件目录中 

2.1 include 对应目录下的 头文件到源文件中,使用三方库中定义的功能

include&define.png

2.2 终端 g++ -I ./include -c xxx.cpp (再执行编译) 【路径匹配查找操作完成编译】

(终端如果存在报错,可能需要声明当前的c++版本,完整指令为:g++ -std=c++11-I ./include -L ./lib xxx.cpp -lgtest)

2.3 包含依赖的三方库的库文件(.a api定义的方法功能) , g++ -L ./lib xxx.o -lgtest 【g++ xxx.o (链接) , 会报错】

这里会去链接 lgtest 对应在 lib 目录下 的libgtest.a 文件
流程图:
c compile&link.png
Printf 输出带色实现和使用说明:

样式;前景色;背景色(0用于重置属性,高亮/加粗 ;黄色; 红色)
格式: 配置(\033[ 0;x;xx;xxx;m)+属性代码(1;33;41)=> \033[0;1;33;41mHello world\n
如果只对当前这段内容进行配置修改属性不连累之后print的文案则需要 在 文案Hello world后 添加 \033[0m
printf(“ \033[1;33;41mHello world/n”)

其他指令说明:
Linux 指令学习: rm -rf xxx/ (删除 xxx 对应的目录文件夹)
生成文件夹 mkdir xxx
展示文件夹中文件内容详情 ll

如何理解 c++ 的编程函数理念,推荐书籍:《C++ 对象模型 》

以上参考学习记录 船长:带你轻松入门C/C++ 内容
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 221,331评论 6 515
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,372评论 3 398
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 167,755评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,528评论 1 296
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,526评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,166评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,768评论 3 421
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,664评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,205评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,290评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,435评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,126评论 5 349
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,804评论 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,276评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,393评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,818评论 3 376
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,442评论 2 359