当前位置: 首页 > news >正文

嵌入式C语言语法概述

1.gcc概述

GCC全称是GUN C Compiler

随着时代的发展GCC支持的语言越来越多,它的名称变成了GNU Compiler Collection

gcc的作用相当于翻译官,把程序设计语言翻译成计算机能理解的机器语言。

(1)gcc -o 

gcc -o (其中o相当于output)

gcc -o 输出的文件名 输入文件名

-o后面一定首先加入的是output file

例子:

gcc -o build helloworld.c
//通过gcc将helloworld.c文件生成新的执行文件build
//在Linux中build不需要加后缀,在Windows中需要加后缀build.exe

(2)gcc -v 

 gcc -v 显示编译阶段的命令

例子:

gcc -v -o build helloworld.c
//通过-v命令我们可以发现gcc通过调用很多翻译官,把helloworld.c翻译为build

2.C语言编译过程介绍 

(1)预处理

cpp -o a.i 08.c

【gcc -E】对源文件进行预处理

预处理:编译器将C语言的头文件编译进来,还有宏的替换。(头文件#include,宏定义#define)

(2)编译

/usr/lib/gcc/aarch64-linux-gnu/9/cc1 -o ccgaeAEA.s 08.c

cc1将08.c文件翻译成ccgaeAEA.s文件 ,cc1又称为编译器

【gcc -S】 就相当于间接调用/usr/lib/gcc/aarch64-linux-gnu/9/cc1 

(3)汇编 

 as -o cclL6PC.o ccgaeAEA.s

 as将ccgaeAEA.s文件翻译成cclL6PC.o文件

【gcc -c】 相当于间接调用as(当然也是先间接调用cc1将.c文件翻译为.s文件再调用的as)

(4)链接

 /usr/lib/gcc/aarch64-linux-gnu/9/collect2 -o build cclL6PC.o和其他.o文件

【gcc -o】 相当于 /usr/lib/gcc/aarch64-linux-gnu/9/collect2

gcc -o build 08.c就相当于先调用了gcc -S和gcc -c,最后再调用gcc -o。(也就是gcc -o可以直接完成编译和汇编这两个过程。)

总结后缀为.s的文件里面的内容是汇编语言。后缀为.o文件的文件里面是机器语言(二进制语言)。

3.C语言编译常见的错误举例

(1)预处理错误

#include "name" (""在当前目录下去寻找name,""一般用于自定义的)

#include <name>(<>在系统环境变量中去寻找name,<>一般是系统库的)

常见错误就是not find 找不到文件

解决方案:

gcc -I 后面跟查找头文件的目录(是i大写I)

(2)编译错误

1.语法错误

2.链接错误:1)原材料不够,

undefined refernce to fun

寻找标签是否实现了,链接时是否加入了链接

2)多了

multiple definition of 'fun'

多次实现了标签(就是原本的.c文件里fun函数完整了,但是又引入了一个外部的.c文件里面的fun函数) ,最终只保留一个标签实现。

例子: 

出现了 undefined refernce to fun,就是因为fun函数不完整。

 解决方法一:

去掉void  fun(void)的;然后添加{ }

解决方法二:

新建一个.c文件

 然后完善函数fun

最后在编译的时候吧含有完整fun函数的.c文件写在后面,就可以了

最好的写法是将两个.c文件都编译成.o文件

最后编译.o文件

4.C语言预处理介绍

1.#include    

 包含头文件(include不是关键字)

2.#define     

 宏(替换,编写时不进行语法检查,所以在编译时有时候会出错)

例子:

#define 宏名 宏体

#define ABC 5+3

printf("the %d\n",ABC*5)   //5+3*5=5+15=20

#define ABC {5+3} //最好加上{}

宏函数:

#define ABC(x)  5+(x)

3.条件编译:

#ifdef #else #endif

4.预定义宏

系统预定好的,编译器预定的。(前后都是两根下划线)

__FUNCTION__ :函数名

__LINE__:行号

__FILE__:文件名

例子:

 

 修改一下:

 

相关文章:

嵌入式C语言语法概述

1.gcc概述 GCC全称是GUN C Compiler 随着时代的发展GCC支持的语言越来越多&#xff0c;它的名称变成了GNU Compiler Collection gcc的作用相当于翻译官&#xff0c;把程序设计语言翻译成计算机能理解的机器语言。 &#xff08;1&#xff09;gcc -o gcc -o &#xff08;其…...

蓝桥杯第19天(Python)(疯狂刷题第3天)

题型&#xff1a; 1.思维题/杂题&#xff1a;数学公式&#xff0c;分析题意&#xff0c;找规律 2.BFS/DFS&#xff1a;广搜&#xff08;递归实现&#xff09;&#xff0c;深搜&#xff08;deque实现&#xff09; 3.简单数论&#xff1a;模&#xff0c;素数&#xff08;只需要…...

【数据库连接,线程,ThreadLocal三者之间的关系】

一、数据库连接与线程的关系 在实际项目中&#xff0c;数据库连接是很宝贵的资源&#xff0c;以MySQL为例&#xff0c;一台MySQL服务器最大连接数默认是100, 最大可以达到16384。但现实中最多是到200&#xff0c;再多MySQL服务器就承受不住了。因为mysql连接用的是tcp协议&…...

java 虚拟股票交易系统Myeclipse开发mysql数据库web结构jsp编程计算机网页项目

一、源码特点 JSP 虚拟股票交易系统是一套完善的java web信息管理系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统采用serlvetdaobean&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用 B/S模式开发。 java 虚拟股票交易系统Myeclips…...

spring如何开启允许循环依赖

如何解决spring循环依赖 在Spring框架中&#xff0c;allowCircularReferences属性是用于控制Bean之间的循环依赖的。循环依赖是指两个或多个Bean之间相互依赖的情况&#xff0c;其中一个Bean依赖于另一个Bean&#xff0c;同时另一个Bean又依赖于第一个Bean。 allowCircularRe…...

jenkins+sonarqube+自动部署服务

一、jenkins 配置Pipeline 二、新建共享库执行脚本 共享库可以是一个普通的gitlab项目&#xff0c;目录结构如下 三、添加到共享库 Jenkins Dashboard–>系统管理–>系统配置–>Global Pipeline Libraries Name: 共享库名称&#xff0c;自定义即可&#xff1b; Defa…...

【算法系列之动态规划III】背包问题

背包问题 01背包指的是物品只有1个&#xff0c;可以选也可以不选。完全背包是物品有无数个&#xff0c;可以选几个也可以不选。 二维数组01背包 有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i]&#xff0c;得到的价值是value[i] 。每件物品只能用一次&…...

MONAI-LayerFactory设计与实现

LayerFactory 用于创建图层的工厂对象&#xff0c;这使用给定的工厂函数来实际产生类型或构建可调用程序。这些函数是通过名称来参考的&#xff0c;可以在任何时候添加。 用到的关键技术点&#xff1a; 装饰器(Decorators), 例如&#xff1a;property装饰器&#xff0c;创建…...

Thinkphp 6.0路由的定义

本节课我们来了解一下路由方面的知识&#xff0c;然后简单的使用一下路由的功能。 一&#xff0e;路由简介 1. 路由的作用就是让 URL 地址更加的规范和优雅&#xff0c;或者说更加简洁&#xff1b; 2. 设置路由对 URL 的检测、验证等一系列操作提供了极大的便利性&#xff1b; …...

Kafka系列之:深入理解Kafka集群调优

Kafka系列之:深入理解Kafka集群调优 一、Kafka硬件配置选择二、Kafka内存选择三、CPU选择四、网络选择五、生产者调优六、broker调优七、消费者调优八、Kafka总体调优一、Kafka硬件配置选择 服务器台数选择: 2 * (生产者峰值生产速率 * 副本数 / 100) + 1磁盘选择: Kafka…...

creator-泄漏检测之资源篇

title: creator-泄漏检测之资源篇 categories: Cocos2dx tags: [creator, 优化, 泄漏, 内存] date: 2023-03-29 14:48:48 comments: false mathjax: true toc: true creator-泄漏检测之资源篇 前篇 资源释放 - https://docs.cocos.com/creator/manual/zh/asset/release-manager…...

【DevOps】Jenkins 运行任务时遇到 FATAL:Unable to produce a script file 报错(已解决)

文章目录一、问题描述二、定位原因三、解决方案四、其他方案五、总结关键词&#xff1a; Jenkins、Unable to produce a script file、UnmappableCharacterException、IOException: Failed to create a temp file on一、问题描述 由于使用的 Jenkins 存在安全漏洞&#xff08;…...

Web前端

WEB前端 HTMLCSSJavaScriptjQuery(js框架)Bootstrap(CSS框架)AJAXJSON 文章目录 WEB前端WEB前端三大核心技术Web开发工具文本编辑器集成开发环境(IDE)浏览器选择HTML什么是 HTML?HTML版本变迁HTML-HelloWorldHTML 文档 = 网页HTML 标签属性(Attribute)HTML 常用标签...

资源操作:Resources

文章目录1. Spring Resources概述1.2 Resource 接口1.3 Resource的实现类1.3.1 UrlResource访问网络资源1.3.2 ClassPathResource访问类路径下资源1.3.3 FileSystemResource访问文件系统资源1.3.4 ServletContextResource1.3.5、InputStreamResource1.3.6、ByteArrayResource1.…...

GDB调试的学习

很早就想在好好学一学gdb了&#xff0c;正好最近学算法&#xff08;以前一直以为干硬件不需要什么特别厉害的算法&#xff0c;结果现在卷起来了。大厂面试题也有复杂一些的算法了&#xff09; 下面的这些命令是别的博主总结的 GDB 调试过程_gdb调试过程_麷飞花的博客-CSDN博客…...

熵值法综合评价分析流程

熵值法综合评价分析流程 一、案例背景 当前有一份数据&#xff0c;是各品牌车各个维度的得分情况&#xff0c;现在想要使用熵值法进行综合评价&#xff0c;得到各品牌车的综合得分&#xff0c;从而进行车型优劣对比&#xff0c;为消费者提供购车依据。 数据如下&#xff08;数…...

使用Python Pandas库操作Excel表格的技巧

在数据分析和处理中&#xff0c;我们经常需要对Excel表格进行操作。Python Pandas库提供了丰富的API来读取、写入、修改Excel表格。本文将介绍如何使用Python Pandas库操作Excel表格&#xff0c;包括向Excel表格添加新行、创建Excel表格等。 1.向Excel表格添加新行 下面是一个…...

LeetCode练习七:动态规划上:线性动态规划

文章目录一、 动态规划基础知识1.1 动态规划简介1.2 动态规划的特征1.2.1 最优子结构性质1.2.2 重叠子问题性质1.2.3 无后效性1.3 动态规划的基本思路1.4 动态规划基础应用1.4.1 斐波那契数1.4.2 爬楼梯1.4.3 不同路径1.5 个人总结二、记忆化搜索2.1 记忆化搜索简介2.2 记忆化搜…...

基于正点原子F407开发版和SPI接口屏移植touchgfx完整教程(一)

一、相关软件包安装 1、打开cubemx包管理器 2、安装F4软件包 3、安装touchgfx软件包 二、工程配置 1、新建工程 2、sys配置 3、rcc配置 4、crc配置 5、添加touchgfx软件包 6、配置touchgfx软件包 将width和height改为自己屏幕尺寸 7、生成工程 三、代码修改 1、将屏幕相关驱…...

Linux--进程间通信

前言 上一篇相关Linux文章已经时隔2月&#xff0c;Linux的学习也相对于来说是更加苦涩&#xff1b;无妨&#xff0c;漫漫其修远兮,吾将上下而求索。 下面该片文章主要是对进程间通信进行介绍&#xff0c;还对管道&#xff0c;消息队列&#xff0c;共享内存&#xff0c;信号量都…...

RocketMQ延迟消息机制

两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数&#xff0c;对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后&#xf…...

从零实现富文本编辑器#5-编辑器选区模型的状态结构表达

先前我们总结了浏览器选区模型的交互策略&#xff0c;并且实现了基本的选区操作&#xff0c;还调研了自绘选区的实现。那么相对的&#xff0c;我们还需要设计编辑器的选区表达&#xff0c;也可以称为模型选区。编辑器中应用变更时的操作范围&#xff0c;就是以模型选区为基准来…...

Docker 运行 Kafka 带 SASL 认证教程

Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明&#xff1a;server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...

聊聊 Pulsar:Producer 源码解析

一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台&#xff0c;以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中&#xff0c;Producer&#xff08;生产者&#xff09; 是连接客户端应用与消息队列的第一步。生产者…...

HTML 列表、表格、表单

1 列表标签 作用&#xff1a;布局内容排列整齐的区域 列表分类&#xff1a;无序列表、有序列表、定义列表。 例如&#xff1a; 1.1 无序列表 标签&#xff1a;ul 嵌套 li&#xff0c;ul是无序列表&#xff0c;li是列表条目。 注意事项&#xff1a; ul 标签里面只能包裹 li…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序

一、开发准备 ​​环境搭建​​&#xff1a; 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 ​​项目创建​​&#xff1a; File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...

视频字幕质量评估的大规模细粒度基准

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用&#xff0c;因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型&#xff08;VLMs&#xff09;在字幕生成方面…...

【JavaWeb】Docker项目部署

引言 之前学习了Linux操作系统的常见命令&#xff0c;在Linux上安装软件&#xff0c;以及如何在Linux上部署一个单体项目&#xff0c;大多数同学都会有相同的感受&#xff0c;那就是麻烦。 核心体现在三点&#xff1a; 命令太多了&#xff0c;记不住 软件安装包名字复杂&…...

蓝桥杯3498 01串的熵

问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798&#xff0c; 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...

Mobile ALOHA全身模仿学习

一、题目 Mobile ALOHA&#xff1a;通过低成本全身远程操作学习双手移动操作 传统模仿学习&#xff08;Imitation Learning&#xff09;缺点&#xff1a;聚焦与桌面操作&#xff0c;缺乏通用任务所需的移动性和灵活性 本论文优点&#xff1a;&#xff08;1&#xff09;在ALOHA…...