C高级(学习)2024.8.1

news2024/9/20 8:15:20

目录

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1967784.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

发布NPM包详细流程

制作 首先需要制作一个npm包。 按照以下步骤依次执行。 mkdir my-npm-package cd my-npm-package npm init 相信这一步不需要过多的解释&#xff0c;就是创建了一个文件夹&#xff0c;然后初始化了一下文件夹。 然后在生成的package.json文件夹中更改一下自己的配置&…

Python-docx,修改word编辑时间总计、创建时间、上次修改时间、作者、上次修改者、备注

Python版本3.9&#xff0c;Python-docx版本1.1.2 修改下图中红框内的信息 创建时间、上次修改时间、作者、上次修改者、备注&#xff0c;这些都有接口&#xff0c;调用 import docx from docx import Document from docx.oxml.ns import qn from docx.shared import Inches, …

“2028年互联网上所有高质量文本数据将被使用完毕”

研究公司Epoch AI预测&#xff0c;到2028年互联网上所有高质量的文本数据都将被使用完毕&#xff0c;机器学习数据集可能会在2026年前耗尽所有“高质量语言数据”。研究人员指出&#xff0c;用人工智能(AI)生成的数据集训练未来几代机器学习模型可能会导致“模型崩溃”&#xf…

助力外卖霸王餐系统运营 微客云近期更新汇总

全面助力霸王餐合作运营&#xff0c;给大家汇报下最近微客云更新的内容&#xff0c;说实话近期非常的忙&#xff0c;各种功能上线&#xff0c;各种市场部们反馈的需求&#xff0c;微客云霸王餐招商体系&#xff08;分站&#xff09;自年底上线到现在&#xff0c;不知已更新了多…

2024年8月初AI大赛盛宴来袭!7场赛事等你挑战,最高奖金高达1.4万!

本期为大家带来7场精彩的AI大赛&#xff0c;主要以AI绘画大赛为主打&#xff0c;涵盖1场视频大赛和1场大模型大赛。 其中&#xff0c;以下3场大赛不容错过&#xff0c;分别是“36氪AI PARTNER2024具身智能大会”、“2024年大学生AI艺术季”和“混元万物 LiblibAlx腾讯混元模型…

微型丝杆弯曲:工件精度下降的隐形杀手!

微型丝杆作为精密机械部件&#xff0c;‌其弯曲或变形会对使用它进行加工的工件产生直接影响。在机械加工中&#xff0c;微型丝杆弯曲是一个不容忽视的问题&#xff0c;它会对工件造成多方面的损害。 1、加工精度受损&#xff1a;弯曲会直接导致工具的实际运动轨迹与程序设计的…

从零开始学习网络安全渗透测试之基础入门篇——(五)WEB抓包技术HTTPS协议APP小程序PC应用WEB转发联动

HTTP/HTTPS抓包技术是一种用于捕获和分析网络流量的方法&#xff0c;它可以帮助开发者、测试人员和网络安全专家理解应用程序的网络行为、调试问题、分析性能和识别潜在的安全威胁。 一、抓包技术和工具 &#xff08;一&#xff09;Charles Charles 是一款流行的网络调试代…

leetcode刷题日记-括号生成

题目描述 题目解析 回溯的题目&#xff0c;不过这个两个if我就感觉有点难以理解了&#xff0c;不过仔细的思考了一下&#xff0c;确实考虑到了每个位置的情况&#xff0c;特别是针对右边括号 题目代码 class Solution:def generateParenthesis(self, n: int) -> List[str…

苹果的秘密武器:折叠屏iPhone即将来袭,可能是史上最薄折叠屏?

苹果公司一直以来以其独特的产品设计理念和卓越的技术创新能力而闻名。近期&#xff0c;有关苹果折叠屏iPhone的消息再次引发了业界的高度关注。 据可靠消息源透露&#xff0c;这款备受期待的设备已经结束了实验阶段&#xff0c;预计最早将在2026年与消费者见面。 折叠屏iPhon…

【vue-cli】vue-cli@2源码学习

vue-cli 2 源码 @vue/cli: 3.11.0创建项目 vue create 项目名称 @vue/cli: 2.x.x 创建项目 vue init webpack yhh-project 脚手架初始化项目流程: 下载vue/cli@2 源码 下载完成后初始化 npm i 创建项目 vue init webpack yhh-project vue-init: bin/vue-init #!/usr/bin/e…

大模型数据分析平台 LangSmith 介绍

[​LangSmith​]​ 是 LangChain 自主研发的 LLM 应用程序开发、监控和测试的平台。 LangChain 是一款使用 LLM 构建的首选开源框架&#xff0c;一个链接面向用户程序和 LLM 之间的一个中间层&#xff0c;允许 AI 开发者将像 ​​GPT-4​​ 、文心一言等大型语言模型与外部的计…

springboot依赖之JDBC API手写sql 管理数据库

JDBC API 依赖名称: JDBC API 功能描述: Database Connectivity API that defines how a client may connect and query a database. 数据库连接 API&#xff0c;定义客户端如何连接和查询数据库。 JDBC API 是 Java 标准库的一部分&#xff0c;提供低级别的数据库访问。需要…

基于SpringBoot+Vue的超市进销存系统(带1w+文档)

基于SpringBootVue的超市进销存系统(带1w文档) 基于SpringBootVue的超市进销存系统(带1w文档) 本系统提供给管理员对首页、个人中心、员工管理、客户管理、供应商管理、承运商管理、仓库信息管理、商品类别管理、 商品信息管理、采购信息管理、入库信息管理、出库信息管理、销售…

一次通过PMP考试的学习经验分享

很开心的收到PMI发来的邮件&#xff0c;祝贺我通过了PMP考试。应助教老师的邀请&#xff0c;简单说下我的一些学习备考经验&#xff0c;希望能给即将参加考试的大家带来一些收获。 第一&#xff0c;听基础课&#xff0c;截图做笔记 课程时间对我来说&#xff0c;还是蛮长的。…

MQA(Multi-Query Attention)详解

论文名称&#xff1a;Fast Transformer Decoding: One Write-Head is All You Need 论文地址&#xff1a;https://arxiv.org/abs/1911.02150v1 MQA(Multi-Query Attention)是Google团队在2019年提出的&#xff0c;是MHA (Multi-head Attention&#xff0c;多头注意力机制)的一…

微信运营新助手:自动回复神器,让沟通更高效!

在现代职场中&#xff0c;效率是成功的关键。然而&#xff0c;我们经常会面对大量重复且繁琐的日常任务&#xff0c;消耗宝贵的时间和精力。 今天&#xff0c;我想向大家分享一个强大的微信自动回复神器&#xff0c;它将帮助你高效管理沟通&#xff0c;提升工作效率。 1、自动…

GraphHopper:开源路线规划引擎

在当今信息爆炸的时代&#xff0c;我们越来越依赖于智能路线规划来帮助我们节省时间、提高效率。GraphHopper作为一款开源的路线规划引擎&#xff0c;为我们提供了一个强大而灵活的工具&#xff0c;让我们可以在自己的应用程序中实现高效的路径计算。 什么是GraphHopper&#…

电脑录屏怎么录?2024四大工具助你轻松录制每一刻!

无论是教学演示、游戏直播&#xff0c;还是工作汇报&#xff0c;一款好用的录屏软件都能帮助我们轻松完成任务。那么&#xff0c;电脑录屏怎么录呢&#xff1f;今天为大家推荐几款实用的电脑录屏工具&#xff0c;让你轻松成为录屏达人&#xff01; Foxit REC&#xff1a;专业与…

Linux进程控制——进程程序替换、bash的模拟实现

文章目录 exec系列函数execlexeclp和execle execv系列函数bash的模拟实现实现思路完整代码其他问题 在学习进程的时候&#xff0c;我们想fork一个子进程&#xff0c;然后就可以给他布置任务了 但是如果我们分成两个人开发&#xff0c;父子进程分别负责不同的任务&#xff0c;等…

揭秘智能工牌:如何成为房企销售团队的数字化转型加速器

在这个竞争激烈的市场环境中&#xff0c;房企想要脱颖而出&#xff0c;不仅需要优质的产品和服务&#xff0c;更需要高效的销售团队。而销售团队的能力提升&#xff0c;离不开精细化管理和科技的赋能。DuDuTalk智能语音工牌&#xff0c;正是这样一款融合了AI技术与销售实战智慧…