C/C++
文章平均质量分 61
一些C++学习笔记
菜鸟不会飞~
这个作者很懒,什么都没留下…
展开
-
Makefile学习
简述Makefile是一种被用作自动化编译,Makefile定义了一系列的规则来指定文件编译顺序,以及哪些文件需要重新编译,甚至可以像shell脚本一样执行操作系统的命令。本篇只是简单概念及使用方式,详细的可参考:C语言中文网-Makefile教程规则普通规则target... : prerequisites ... command ......模块描述target可以是一个object file(目标文件),也可以是一个执行文件,还可以是一个标签(l原创 2021-12-12 19:00:12 · 4363 阅读 · 0 评论 -
gcc编译工具链使用
简述gcc的全称是GNU Compiler Collection,它是一个能够编译多种语言的编译器。最开始gcc是作为C语言的编译器(GNU C Compiler),现在除了c语言,还支持C++、java、Pascal等语言。gcc支持多种硬件平台。常用参数(大小写敏感)参数作用-o重定向目标文件-E只进行预处理,产物: *.-S编译器执行完编译操作后停止,产物: *.s-c编译器执行完汇编操作后停止,产物 *.o-Wall使gcc对源文件的代码有原创 2021-12-12 16:31:51 · 1224 阅读 · 0 评论 -
Linux环境下程序编译、链接、执行
编译过程预编译处理读取源码,对源码中文伪指令(以 # 开头)和特殊符号进行处理。生成一个没有宏定义、条件编译指令以及特殊符号的文件。宏替换,对#define、#undef、#、##替换。条件编译,如#ifdef、#ifndef、#else、#elif、#endif。预编译程序将根据相关指令,过滤掉不必要的代码。头文件包含,该阶段会把#include引入的头文件插入到源文件中。特殊符号,预编译程序可以识别一些特殊的符号,例如在源程序中出现的LINE和FILE。预编译程序对于在源程序中出现的这些原创 2021-12-12 15:35:37 · 2005 阅读 · 1 评论 -
C/C++ volite关键字
概念一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。对于一般变量:为提高存取速度,编译器优化时有时会先把变量读取到一个寄存器中。以后再取变量值时,就直接从寄存器中取值。注意一个参数既可以是const也可以是volatile:一个例子是只读的状态寄存器。它是volatile因为它可能被意想不到地改变。它是const因为程序不应该试图去修改它原创 2021-07-19 22:55:07 · 1032 阅读 · 0 评论 -
C语言字节对齐
C语言字节对齐参考来源字节对齐概念字节对齐的作用分类结构体对齐简单示例对齐准则参考来源文章主要参考自以下文章,进行整合补充:C语言内存对齐详解C语言字节对齐问题详解什么是字节对齐,为什么需要字节对齐字节对齐概念 在C语言中,结构是一种复合数据类型,其构成元素既可以是基本数据类型(如int、long、float等)的变量,也可以是一些复合数据类型(如数组、结构、联合等)的数据单元。在结构中,编译器为结构的每个成员按其自然边界(alignment)分配空间。各个成员按照它们被声明的顺序在内存中顺转载 2021-07-12 23:57:01 · 2042 阅读 · 0 评论 -
const成员只能调用const函数
为什么const对象只能调用const成员函数,而不能调用非const成员函数?在c++中,我们可以用const来定义一个const对象,const对象是不可以调用类中的非const成员函数,这是为什么呢?假设有一个类,名字为test代码如下:class test{ int i; public: void print(); test(int i); };我们知道c++在类的成员函数中还会隐式传入一个指向当前对象的this指针,所以在test类中,实际的print函数应该是这样转载 2021-07-08 22:38:12 · 843 阅读 · 0 评论 -
宏和内联函数的区别
1转载 2021-07-08 22:13:47 · 241 阅读 · 0 评论 -
inline内联函数
特征相当于把内联函数里面的内容写在调用内联函数处;相当于不用执行进入函数的步骤,直接执行函数体;相当于宏,却比宏多了类型检查,真正具有函数特性; 不能包含循环、递归、switch 等复杂操作;在类声明中定义的函数,除了虚函数的其他函数都会自动隐式地当成内联函数。使用// 声明1(加 inline,建议使用)inline int functionName(int first, int secend,...); // 声明2(不加 inline)int functionName(int转载 2021-07-07 22:32:17 · 277 阅读 · 0 评论 -
this 指针
this 指针是一个隐含于每一个非静态成员函数中的特殊指针。它指向正在被该成员函数操作的那个对象。当对一个对象调用成员函数时,编译程序先将对象的地址赋给 this 指针,然后调用成员函数,每次成员函数存取数据成员时,由隐含使用 this 指针。当一个成员函数被调用时,自动向它传递一个隐含的参数,该参数是一个指向这个成员函数所在的对象的指针。this 指针被隐含地声明为: ClassName const this,这意味着不能给this指针赋值;在ClassName类的const成员函数..转载 2021-07-07 22:13:11 · 85 阅读 · 0 评论 -
c++ static 关键字
全局静态变量在全局变量前加上关键字static,全局变量就定义成一个全局静态变量.静态存储区,在整个程序运行期间一直存在。初始化: 未经初始化的全局静态变量会被自动初始化为0(自动对象的值是任意的,除非他被显式初始化);作用域: 全局静态变量在声明他的文件之外是不可见的,准确地说是从定义之处开始,到文件结尾。局部静态变量在局部变量之前加上关键字static,局部变量就成为一个局部静态变量。内存中的位置:静态存储区初始化: 未经初始化的全局静态变量会被自动初始化为0(自动对象的值是任意的原创 2021-07-06 23:19:00 · 81 阅读 · 2 评论 -
c++ const 关键字
修饰变量,说明该变量不可以被改变;修饰指针,分为指向常量的指针和指针常量;常量引用,经常用于形参类型,即避免了拷贝,又避免了函数对值的修改;修饰成员函数,说明该成员函数内不能修改成员变量。// 类class A{private: const int a; // 常对象成员,只能在初始化列表赋值 public: // 构造函数 A() { }; A(int x) : a(x) { }; // 初始..转载 2021-07-05 23:03:40 · 76 阅读 · 0 评论 -
Linux环境C++编译第三方库调用
-O 指定输出文件名。g++ hello.cpp -o hello -E 预处理,将要包含(include)的文件插入原文件中、将宏定义展开、根据条件编译命令选择要使用的代码,删除所有的注释//和/* */,添加行号和文件名标识,方便后边编译时编译器产生调试用的行号心意以及编译时产生编译错误或警告时能够显示行号。最后将这些代码输出到一个“.i”(预处理文件)中等待进一步处理。g++ -E hello.cpp -o hello.i-S ..原创 2021-06-14 16:44:36 · 2224 阅读 · 0 评论 -
Visual Studio动态库、静态库使用
Windows下静态库为 *.lib 文件,动态库为 *.dll文件。1、静态库添加至项目库目录添加(lib文件所在目录)项目->属性->配置属性->连接器->常规->附加库目录。库文件添加(lib文件名)项目->属性->配置属性->链接器->输入->输入依赖项,填写需要引用的第三方库,多个库文件以英文分号(;)隔开。添加头文件包含目录(对应库的头文件路径)项目->属性->配置属性->C/C+±>原创 2021-04-05 16:04:35 · 2264 阅读 · 0 评论