首页 > 其他分享 >C高级(学习)2024.8.1

C高级(学习)2024.8.1

时间:2024-08-01 17:23:50浏览次数:9  
标签:gcc 2024.8 Makefile 高级 学习 xx add test main

目录

shell命令

数组

数组的赋值

数组的调用

遍历数组

函数

函数的定义方式

函数调用

分文件编程

源文件

头文件

include引用时“”和<>的区别

编译工具

gcc编译工具

gdb调试

make工具

定义

Makefile格式

Makefile管理多个文件

Makefile变量

自定义变量

预定义变量

自动变量

Makefile四种方式总结

第一种

第二种

第三种

第四种

shell命令

数组

数组的赋值

1.array=(1 2 3 4 5)


2.array=($1 $2 $3 $4)  命令行传参


3.read a b c
   array=($a $b $c)


4.read -a array  终端输入数据到数组中

数组的调用

${array[i]}        数组下标0~n-1,通过下标获取数组元素
array[i]=100        对数组元素重新赋值

${array[@]}  遍历数组 
${#array[@]}  计算数组元素的个数

遍历数组

1.echo   ${array[@]}  


2.for ((i=0;i < ${#array[@]};i++}
   do
           echo -n  ${array[i]}
   done

函数

函数的定义方式

1.函数名()
  {

        表达式

  }

2.function  函数名()
  {

        表达式

   }

函数调用

函数名  参数列表

#!/bin/bash
fun()
{
    echo "请输入两个数字:"
}
fun
read NUM1 NUM2
fun1()
{
    NUM=`expr $1 + $2`
    echo "两数之和为:" $NUM
}
fun1 $NUM1 $NUM2

函数内$1 $2表示的是传递的参数

分文件编程

源文件

.c结尾的文件

包含main函数的.c

包含子函数的.c

头文件

.h结尾文件

头文件、宏定义、typedef 、结构体、共用体、枚举、函数声明

include引用时“”和<>的区别

<>去系统目录查找头文件
“”先从当前目录下查找,如果没有再去系统目录查找头文件。

系统默认搜索路径
/usr/include
/usr/local/include

追源码:
        ctrl   单击
返回:
        ctrl    alt   -

编译工具

gcc编译工具

预处理:#开头内容,展开头文件、替换宏定义、删除无用注释,不会检查语法错误
    gcc  -E  xx.c -o xx.i
编译:检查语法错误,有错就报错,无错就继续生成汇编文件
    gcc  -S xx.i -o xx.s
汇编:    将汇编文件生成不可执行的二进制文件
    gcc  -c  xx.s  -o  xx.o
链接:    链接库文件,生成可执行的二进制文件
    gcc   xx.o  -o   xx

gdb调试

gcc -g xx.c
gdb  a.out

r        运行代码
l        查看文件
b        行号或者函数名:添加断点
info b        查看断点情况
d num(断点编号)        删除断点
p 变量名        查看变量的值
s/n        单步运行,s会进入子函数顺序执行;单步跳过,n不会进入子函数
c        执行到下一个断点的位置
help        帮助
q        退出

        步骤:代码写好后,先通过gcc -g进行编译代码,没有错误后,可以通过gdb  a.out进行调试,输入l查看文件内容,通过b设置断点,输入r进行运行,n或s进行单步调试,q退出

make工具

定义

make工程管理器就是一个“自动编译管理器”这里的“自动”是指它能构根据文件时间戳自动发现更新过的文件而减少编译的工作量,同时,它通过读入Makefile文件文件的内容来执行大量的编译工作。Makefile或makefile是make读取的唯一配置文件

Makefile格式

目标:依赖
        命令
注意:命令前敲TAB

gcc编译步骤中,可以按照如下步骤的逆序写Makefile文件
gcc  -c  xx.c  -o  xx.o     目标:xx.o  依赖:xx.c
gcc xx.o  -o  xx              目标:xx    依赖:xx.o

test:test.o
    gcc test.o -o test
test.o:test.c
    gcc -c test.c -o test.o

使用make进行编译

Makefile管理多个文件

1.创建多个文件


2.写一个Makefile文件

        具体的见文档末尾的四种总结Makefile文件

Makefile变量

自定义变量

一般大写,取变量的值$(变量名)
= 按递归方式展开
:= 直接赋值 (当前的值是什么就立即赋值)
+= 追加新的值
?=判断之前是否定义,如果定义了,就不重新赋值;否则赋值

预定义变量

系统预先定义好的一些变量,可能有默认值可能没有默认
RM    文件删除程序的名称,默认值为rm -f
CC     C编译器的名称,默认值为cc。
CPP  C预编译器的名称,默认值为$(CC) –E。
CFLAGS   C编译器的选项,无默认值。
OBJS   生成的二进制文件或目标文件,自己定义

自动变量

$<        第一个依赖的名称
$@         目标文件的完整名称
$^        所有不重复的依赖的名称                                                                                                所有:%

Makefile四种方式总结

第一种

test:main.o add.o
	gcc main.o add.o -o test
main.o:main.c
	gcc -c main.c -o main.o
add.o:add.c
	gcc -c add.c -o add.o

.PHONY:clean
clean:
	$(RM) *.o test

第二种

CC=gcc
CFLAGS=-c -g -Wall
OBJS=main.o add.o
test:$(OBJS)
	$(CC) $(OBJS) -o test
main.o:main.c
	$(CC) $(CFLAGS) main.c -o main.o
add.o:add.c
	$(CC) $(CFLAGS) add.c -o add.o

.PHONY:clean
clean:
	$(RM) *.o test

第三种

CC=gcc
CFLAGS=-c -g -Wall
OBJS=main.o add.o
test:$(OBJS)
	$(CC) $^ -o $@
main.o:main.c
	$(CC) $(CFLAGS) $< -o $@
add.o:add.c
	$(CC) $(CFLAGS) $< -o $@

.PHONY:clean
clean:
	$(RM) *.o test

第四种

CC=gcc
CFLAGS=-c -g -Wall
OBJS=main.o add.o

test:$(OBJS)
	$(CC) $^ -o $@
%.o:%.c
	$(CC) $(CFLAGS) $< -o $@

.PHONY:clean
clean:
	$(RM) *.o test

标签:gcc,2024.8,Makefile,高级,学习,xx,add,test,main
From: https://blog.csdn.net/qq_60450758/article/details/140843435

相关文章

  • 【笔记】杂题选讲 2024.8.1 下午
    [AGC018F]TwoTrees[AGC018F]TwoTrees-洛谷|计算机科学教育新生态(luogu.com.cn)先判一下奇偶性。考虑做一个很强的钦定,奇数都填\(\pm1\),偶数都填\(0\)。对于同一棵树的一棵子树,考虑对子树内两个奇数点做匹配,要求匹配上的点一个\(+1\)一个\(-1\),这样就能在子树的根......
  • 组合数学学习笔记(二)(2024.7.4)
    一、鸽巢原理1.鸽巢原理将\((\sum\limits_{i=1}^n{p_i})-n+1\)放入\(n\)个盒子,一定存在一个盒子\(i\),使得第\(i\)个盒子至少装了\(p_i\)个物品。练习一有十个数\(a_1,a_2\dotsa_{10}\)满足\(\forall_{1\leqi\leq10}{1\leqa_i\leq60}\),证明能够从\(a_i\)中挑......
  • 机器学习-算法分类以及用途
    1.监督学习算法线性回归(LinearRegression)目的:用于预测一个或多个自变量(X)与因变量(Y)之间的线性关系。应用领域:房价预测、销售预测、温度预测等连续值预测问题。逻辑回归(LogisticRegression)目的:虽然名为回归,但实际上是用于二分类问题的分类算法。应用领域:垃圾邮件识别、......
  • 多项式学习笔记(一)(2024.7.6)
    声明:在本节范围内,所有同余号(多项式运算)均在\((\text{mod}x^n)\)意义下进行;所有等号(代数运算)均在模某个质数\(p\)意义下进行。暴力多项式计算加法\(H(x)=F(x)+G(x)\),求\(H(x)\)解:类比高精度加法\(h_i=f_i+g_i\),复杂度\(O(n)\)#include<bits/stdc++.h>usingnames......
  • [学习笔记]最小割树 (Gomory-Hu Tree)
    本文是在作者阅读多篇博客后糅合而成的,部分内容有雷同。最小割树又称Gomory-Hu树,由RalphEdwardGomory和TeChiangHu于1961年发表的论文中共同提出。最小割树可以在\(n−1\)次最大流中构建,并通过树上RMQ求任意两点之间的最小割。板子题:P4897【模板】最小割树(G......
  • 通过 GraalVM 在 Spring Boot 项目中运行 Python 脚本(强化学习)
    我想要完成的是通过GraalVM在SpringBoot项目中运行python脚本(在我的例子中是agent.py)。我已经安装了GraalVM(cejdk21)并给它一个路径。还在项目结构中定义并根据graalvm和graalvm的python更改了pom.xml。即使它给出了无法找到火炬模块的错误。我还有一个安装了......
  • MySQL 学习笔记 进阶(InnoDB引擎 下)
    InnoDB引擎 InnoDB引擎-事务原理-概述事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。原子性(Atomicity):事务是不可分割的最小操作单元,要么全部成功,要么全部失败。一致性(Co......
  • 深度学习(RNN+VAE):高质量的音乐作品让音符飞舞起来
    深度学习在音乐生成领域有着广泛的应用,其中循环神经网络(RNN)和变分自编码器(VAE)是两种重要的模型。下面是这两种模型在音乐生成中的应用概述:1.循环神经网络(RNN)在音乐生成中的应用:序列建模:RNN特别适合处理序列数据,如音乐作品中的音符序列。它可以捕捉音乐中的时序依赖性,生成连......
  • 【笔记】字符串选讲 2024.8.1
    [COCI2015-2016#5]OOP(Trie)P6727[COCI2015-2016#5]OOP-洛谷|计算机科学教育新生态(luogu.com.cn)正反串分别建Trie,可以搞出两个dfn区间,加之长度限制,三维数点。有\(O(n\logn)\)做法。将字典串\(S[1..m]\),对所有\(1\leqi\leqm\),将\(S[i+1,m]\)的hash值插入......
  • Linux操作系统基础学习笔记(4)
    Linux操作系统基础学习笔记(4)前言4、Linux文件和目录管理常规命令格式(1)列出目录内容和属性(文件)(2)打印工作路径(3)切换工作路径(4)查看文件类型(5)复制文件或目录(6)查找文件或目录(7)创建目录(8)移动或重命名(9)删除文件(不能用来删除文件夹)(10)创建空文件(11)挂载(12)链接(有点像windows的快捷......