Liunx系统下c语言的学习

Liunx系统下c语言的学习

注意事项

C语言的基础语法

基本语法
  1. 基本字符集
    • 标识符的命名规则
    • 32个关键字
    • 分隔符
  2. 数据类型
    • 基本数据类型
    • 其他数据类型
  3. 常量与变量
    • 常量
    • 变量
  4. 运算符与表达式
    • 算数运算符
    • 关系运算符
    • 逻辑运算符
    • 赋值运算
    • 条件运算符
    • 逗号运算符
    • 长度测试运算符
    • 运算符的优先级
  5. 数据类型的转换
    • 强制类型转换
    • 自动类型转换

环境变量

环境变量是什么?简单来说就是制定一个目录,运行软件的时候,相关的程序将会按照该目录寻找相关文件。设置变量对于一般人最实用的功能是不用拷贝dll文件到系统目录中,而path这一系统变量就是系统搜索dll文件的一系列路径

makeFile (分文件)的编写

Makefile文件中描述了整个软件工程的 编译规则和各个文件之间的依赖关系

  1. 使用的原因:为了更好的编译项目,清晰快捷的整理源文件,提高效率

  2. make工具可以将大型的开发项目分成若干个模块

  3. 第一行想要输出的文件不能一步到位,需要依赖与其他,因此在下面可以继续这样子写。(所有依赖写好之后,才会执行最终的文件)

  4. .c文件:主要的每个代码块都在c文件中

  5. .h文件:每个c文件都跟着一个h文件。h文件的作用是放着c文件中函数的声明,结构体的定义等

  6. .o文件:目标文件,每个文件经过编译都会形成一个目标文件(二进制文件)多个目标文件链接后,才能形成可执行文件

    -c只进行预处理,编译,和汇编:-c生成.o文件,只编译并生成目标文件。

  7. 当我们想计算两个数的和时

    主文件main.c

    #include <stdio.h>

    #include “sumFun.h”
    int main()
    {
    //输入
    int a;

    int b;

    ​ scanf("%d%d",&a,&b);
    ​ //执行
    ​ int sum = sumFun(a,b);
    ​ //输出
    ​ printf(“the value is the %d”,sum);
    }

    头文件sumFun.h:数据类型+方法+参数

    int sumFn(int a,int b);

    C文件:sumFun.c

    int sumFun(int a,int b){
    int sum= a+b;
    return sum;
    }

    Markfile:

    main.out:main.c sunFun.o
    gcc main.c sunFun.o -o main.out
    sunFun.o:sunFun.c
    gcc -c sunFun.c

    封装一个函数,直接使用命令就可以输出
    1. main.c

      #include <stdio.h>
      int main (int a,char *b[]){
      int i=1;
      for(i;i<a;i++){
      if(i==a-1)printf("%s\n",b[i]);
      else{
      printf("%s ",b[i]);
      }
      }
      return 0;
      }

    2. 编译:gcc main.c -o myecho

    3. 配置全局变量:

      • 第一步:在当前路径下,在配置全局变量

        sudo mv myecho /usr/bin

      • 第二步:返回根目录,输入myecho 便可以直接使用。


main 函数详解

#include <sdio.h>

int main(it argc,char *argv[]){
    return 0;
}
  • argv:是字符指针的数组,每个元素都是一个字符指针,指向一个字符串,即命令中的每一个参数
  • argc:用于存放命令行参数的个数
  • main函数返回值用于说明程序的退出状态,如果返回0,则代表正常退出,否则代表程序异常退出,可利用echo $?输出为0那么是正常的,如果是其他数字那么发生了错误

输入输出流和错误流

stdin

程序的输入:键盘输入

stdout

程序的输出:终端输出

stderr

程序错误的输出:错误输出

重定向 >>

可以改变文件输出的方式,-

将文件保存在另一个文件中

管道原理及应用

利用Linux所提供的管道符“|”将两个命令隔开,管道符左边命令的输出就会作为管道符右边命令的输入。

原理:管道实际上在内核创建了一个i node,和一个指向它的固定大小内核缓冲区(可以理解为类似cache,但读写不分开),传入的两个文件描述符就都指向这段缓冲区,这样读管道的0文件描述符和写它的1文件描述符,就好像读写这个文件一样,实现了进程间的通信。

存在的作用:

  1. 过滤
  2. 查看数据
  3. 查看通信状态

查看指定目录下包含 'c’的内容:ls /home/xiao/home/ | grep c

查看当前在运行的进程:ps -e

查看当前在运行的进程包含’ssh’的进程:ps -e | grep ssh

指针与内存

  1. 为什么32位系统是4G内存:

    32位操作系统安装在32位电脑中,32位电脑的CPU是32位,即地址总线是32根,CPU处理程序,发出指令给到地址总线(地址总线的作用是传递地址到寻址空间——寻找地址)因为地址总线有32根,所以可以传递出2的32次方中结果,寻址空间会根据这个结果在内存中寻找对应的编号(在开机的时候操作系统就会为内存中的每一个字节进行编号,这个标号即为地址),一个编号对应的是一个字节所以可以寻找到2的32此方个字节(即4G),所以该电脑只能寻找到4G内存,所以32位系统只“需要”管理4G内存,所以32位操作系统在开机的时候只会给4G内存编号,即通俗表达“32位操作系统只能管理4G内存”。

  2. 计算机最小的单位是字节,一字节等于8个2进制位

  3. 操作系统中的寻址空间去寻找地址,两个条件,存在这个东西,找这个东西的条件

  4. 操作系统的作用:分配内存,管理内存

  5. 变量的本质是内存,指针的本质是内存地址,指针是一种数据类型,变量名的本质就是一个地址;

  6. 操作系统是如何管理内存的?

    • 系统内核

    • 可分配内存

    • 代码段在哪里?函数放在代码段,函数的本质就是指针,每个函数的执行记录是存放到栈中

    • 数据段:常量,全局变量

      • 我们要明白的是*永远指向的都是地址
  7. #include <stdion.h>

    int main()

    {

    ​ int i =10;

    ​ int p = &i;//指针p指向i的地址,因此星p的值等于10;

    int **p = &p;//将星星p看作为一个星(星p)整体,&p等于i的值,然后星p=i=10,内存中没有这个东西,因此会发生错误

    }

  8. p[3]=101;它的意思是说指针p往下走三个的内存是101;

  9. 强类型,弱类型,根据内存存储的内容,如果根据内存可以判断那么就为强类型,否则为弱类型;c语言是弱类型,举例:当我们编辑的时候,输入,阿斯他妈a与65是不能够相互辨别的,有数据类型限制的是静态声明,否则为动态声明,

gbd调试工具的使用

  1. 出现:linux 下 gdb没有符号表被读取。请使用"file" 命令当我们想调式代码的时候,要使用-g选项,这个是指为了获得有关调试信息,要用gdb进行调试,必须使用-g生成二进制可执行文件

    方法:1.删除该程序原有的可执行文件

    ​ 2.gcc -g example.c -o example.out

    ​ 这样就可以了,用gdb调用example救木有问题鸟。

    1. 一开始:gdb +调试的文件名 :gbd ./example.out

    2. start:调试开始

    3. l:将代码显示出来,当显示不完全的时候,回车即可

    4. p +变量的名字:打印变量的值

    5. n:往下走

    6. s:进人函数

    7. f +函数的编号:进人这个函数

    8. bt:显示栈

    9. break +行号:打断点

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值