LinuxC高级_day5

LinuxC高级_day5

【1】shell函数

1. 函数的定义方式
   1)函数名()
      {
      	命令
      }
   2)function 函数名()
	   {
          
	   }

注意 : 1. function是函数的声明
2. shell函数没有参数列表 参数列表是在调用函数的时候使用位置变量
3. 大括号包裹起来 成对出现
4. 函数内部可以有return语句 但是声明没有返回值
5. 函数内部变量默认是全局变量 如果想要声明局部变量要使用local

  1. 函数的调用方式
   函数名
   函数名 参数1 参数2
   变量=`函数名`
  1. 1)函数中有return的时候 可以使用$?打印函数的返回值
 FUN()
  {
	  let num=1+2
	  return $num
  }
  FUN                         
  echo $?

2)函数中没有return 调用函数之后可以直接打印函数中的变量

  FUN1()
		{   
		    local n=2     #local表示局部变量 $n的时候不输出
		    let num=1+2
		}
		FUN1
		echo $n
		echo $num   

3)给函数传参 参数在函数中用$1 $2来接收

  FUN2()
	{
	    expr $1 + $2
	    echo "hello"
	}
	FUN2 3 4  

4)函数结果给一个变量 把变量打印出来

   FUN3()
	{
	    expr $1 + $2
	    echo "hello"
	}
	var=`FUN3 5 6`    #将函数输出到终端上的所有结果以字符串的形式返还给变量     
	echo $var

【2】gdb使用
1)gcc编译
gcc -v//查看编译器的版本号
gcc version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5)

  • gcc编译出来的代码能不能在安卓手机上执行? – 不能
    架构不同 32位Ubuntu X86 安卓手机arm架构

2)gcc编译四步
1. 预处理
处理与#相关的代码
gcc -E xxx.c -o xxx.i
2. 编译
生成汇编文件 检查代码规范性和语法错误
gcc -S xxx.i -o xxx.s
3. 汇编
将汇编语言编程不可执行的二进制文件(机器语言)
gcc -c xxx.s -o xxx.o
4. 链接
将不可执行变成可执行的二进制文件
gcc xxx.o -o xxx

3)调试方式
1.log文件
2.gdb (* xxgdb)

gcc -g test.c
gdb a.out
l 查看文件
b 行号 / b 函数名 设置断点
info b 查看断点的情况
d num(断点编号) 删除断点
p 变量名 打印变量的值
s/n 单步运行
r 运行代码
help 帮助文档
q 退出

修正履历: 谁 什么时候 动了什么

新规 /***************** 函数:
fun1 参数: @1 int a
. . . . . . . . . . @2 char *b
返回值: int
作者: 日期
******************/

【3】Makefile

  1. make工程管理器 管理较多的文件 读入文件的时间戳
    Makefilemake读入的唯一指定文件

  2. 格式
    标签:
    <TAB> 命令

    目标:依赖文件
    <TAB> 命令

   make: `test' is up to date             文件是最新的

[练习]Makefile编写gcc编译四步
在这里插入图片描述

  1. makefile变量
    1)自定义变量
    1.= 递归方式展开
		var1=abc
		var2=$(var1)
  		var1=def
	                        
		all:
			echo $(var1)   #def
			echo $(var2)   #def
  1. := 直接赋值
       var1:=abc
	   var2:=$(var1)
	   var1:=def

		all:
		    echo $(var1)  #def
		    echo $(var2)  #abc
  1. ?=询问赋值 如果被赋值的话就不再赋值了
		 var1=hello
		 var1?=world

		 all:
		    echo $(var1)   #hello 
  1. +=追加赋值
		var1:=abc
		var2:=def
		var2+=$(var1)

		all:
		    echo $(var1)   #abc   
		    echo $(var2)   #def abc

2)预定义变量
CC C编译器的名称
CFLAGS C编译器的选项

3)自动变量
$<第一个依赖文件的名称
$@ 目标文件的完整名称
$^ 所有不重复的依赖文件名称 以空格分开

eg: 有main.c文件和add.c文件
1.基础的目标文件和依赖文件的关系写出makefile

 add:add.o main.o 
    gcc add.o main.o -o add  
 add.o:add.c 
    gcc -c add.c -o add.o 
 main.o:main.c 
    gcc -c main.c -o main.o
  1. 使用变量替换
OBJS=add.o main.o                      
CC=gcc
CFLAGS=-c
add:$(OBJS)
    $(CC) $(OBJS) -o add 
add.o:add.c
    $(CC) $(CFLAGS) add.c -o add.o
main.o:main.c
    $(CC) $(CFLAGS) main.c -o main.o
  1. 使用自动变量
OBJS=add.o main.o
CC=gcc
CFLAGS=-c
add:$(OBJS)
    $(CC) $(OBJS) -o $@
$(OBJS):%.o:%.c
    $(CC) $(CFLAGS) $^ -o $@     

【注】$(OBJS):%.o:%.c
指明了我们的目标文件从$(OBJS)中获取
%.o表明所有以.o结尾的目标文件也就是main.o和add.o 也就是
$(OBJS)这个集合模式 它依赖模式%.c也就是main.cadd.c

  1. make参数
    make -n只打印命令 但是不执行
    make -s 执行的时候不显示命令

[练习]sub.c add.c main.c写Makefile

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值