程序编译和链接的过程 C/C++

程序编译和链接的过程

一、概述 一个程序在从源码变成二进制程序之间一共有四个步骤:预处理,编译,生成目标文件,链接。 以下展示了一个简单的加法程序的编译过程: 二、预处理 预处理阶段主要有以下的操作: 头文件替换 宏定义替...
阅读全文
Linux c中的信号函数 C/C++

Linux c中的信号函数

一、信号函数的理解 C语言中信号函数的原型为: 这个函数定义看起来十分复杂,可以分为以下两步来理解: 首先看signal(int signo, void (*func)(int))部分,signal是...
阅读全文
C++中return,exit和_exit的区别 C/C++

C++中return,exit和_exit的区别

三者的区别: return作用于函数,使用return只是退出当前函数,而exit和_exit直接终止程序。 return和exit在退出各自作用域前会自动刷新缓冲区,_exit不会刷新当前缓冲区。 ...
阅读全文
Linux c中静态库和动态库的使用方法 C/C++

Linux c中静态库和动态库的使用方法

一、静态库和动态库 静态库是指程序在编译阶段就把库文件嵌入到程序中的三方库,这种行为在程序运行前就已经决定了,程序在编译完成后不再依赖库文件。 动态库和静态库不一样,它是在程序运行期间才发生的调用行为...
阅读全文
C中fgets的用法和注意事项 C/C++

C中fgets的用法和注意事项

fgets函数的声明如下: s表示待接收字符串的缓冲区,size为最大大小,stream为读取的数据流。 对于数据的读取来说,函数实际最多读到size - 1个字节,如果读取的数据比这个长,会自动截断...
阅读全文
C++中可变长参数的使用方法 C/C++

C++中可变长参数的使用方法

一、可变长参数介绍 某些情况下为了完成一些功能,需要用到可变长参数的函数,例如我们最常用的printf和scanf函数: 它们首先都是一个字符串打头,后面再跟上不定数量的参数,为我们的输出形式提供了多...
阅读全文
do-while(0)在宏定义中的作用 C/C++

do-while(0)在宏定义中的作用

do { ... } while(0)是C/C++中常见的定义方式,使用它构造后的宏定义不会受到大括号、分号等的影响,总是会按你期望的方式调用运行。 一、错误引出 以下宏定义: 对于语句f(1,2);...
阅读全文