Linux下 c语言编程(下)
文章目录
前言
学习物联网技术第二天
一、GCC是什么?
GCC(GNU C Compiler)原名GNU C语言编译器,是由GNU开发的编程语言译器,只能处理C语言。但其很快扩展,变得可处理C++,后来又扩展为能够支持更多编程语言,如Fortran、Pascal、Objective -C、Java、Ada、Go以及各类处理器架构上的汇编语言等,所以改名GNU编译器套件(GNU Compiler Collection)。GCC 编译器是 Linux 系统下最常用的 C/C++ 编译器,大部分 Linux 发行版中都会默认安装。GCC 编译器通常以gcc命令的形式在终端(Shell)中使用.
Gcc历史版本
https://gcc.gnu.org/
gcc识别的文件扩展名如下:
.c C 语言文件
.i 预处理后的 C 语言文件
.C、.cc、.cp、.cpp、.c++、.cxx C++语言文件
.ii 预处理后的 C++ 语言文件
.S 汇编文件(用户自己新建的汇编文件)
.s 预处理后的汇编文件
.o 编译后的目标文件
.a 目标文件的静态链接库(链接时使用)
.so 目标文件的动态链接库(链接、运行时使用)
编译器的主要组件
编译流程如下:
预编译文件: *.i
gcc -E test.c -o test.i
汇编文件: *.s
gcc -S test.i -o test.s
目标文件: *.o
gcc -c test.s -o test.o
可执行文件 *.exe
gcc test.o -o test
二、GCC基本用法
1.基本用法
2.实战
代码如下(示例):
#include <stdio.h>
#include <ctype.h>
int main(int argc,char *argv[])
{
char ch;
while((ch = getchar())!=EOF){
if(isalpha(ch)){
printf("ch is char\n");
break;
}
}
return 0;
}
三、了解Gdb调式器
1.Gdb调式流程
进入函数:(gdb): s
全部执行完: (gdb):c
退出: (gdb):q
四、C语言结构体
四、C语言共用体
输入
size = 4;
0x12345678
0x78
五、C语言内存管理
1、C/C++定义了4个内存区间
2、静态存储分配
通常定义变量,编译器在编译时都可以根据该变量的类型知道所需内存空间的大小,从而系统在适应
的时候为他们分配确定的存储空间。
在栈上创建。在执行函数时,函数内部局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元
自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。
3、动态存储分配
1、有些操作对象只有在程序运行时才能确定,这样编译器在编译时就无法他们预定存储空间,只能在程序运行时,
系统根据运行的要求进行分配,这种方法称为动态存储分配
2、所有动态存储分配都在堆区进行
3、从堆上分配,称为动态内存分配。程序在运行的时候用malloc申请任何内存,程序员自己负责在何时用free释放
内存。动态内存的生存期由程序员决定,使用起来非常灵活,但遇到的问题也很多。