当前位置: 首页 > 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;信号量都…...

云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?

大家好&#xff0c;欢迎来到《云原生核心技术》系列的第七篇&#xff01; 在上一篇&#xff0c;我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在&#xff0c;我们就像一个拥有了一块崭新数字土地的农场主&#xff0c;是时…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)

HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

生成 Git SSH 证书

&#x1f511; 1. ​​生成 SSH 密钥对​​ 在终端&#xff08;Windows 使用 Git Bash&#xff0c;Mac/Linux 使用 Terminal&#xff09;执行命令&#xff1a; ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" ​​参数说明​​&#xff1a; -t rsa&#x…...

VTK如何让部分单位不可见

最近遇到一个需求&#xff0c;需要让一个vtkDataSet中的部分单元不可见&#xff0c;查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行&#xff0c;是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示&#xff0c;主要是最后一个参数&#xff0c;透明度…...

Rapidio门铃消息FIFO溢出机制

关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系&#xff0c;以下是深入解析&#xff1a; 门铃FIFO溢出的本质 在RapidIO系统中&#xff0c;门铃消息FIFO是硬件控制器内部的缓冲区&#xff0c;用于临时存储接收到的门铃消息&#xff08;Doorbell Message&#xff09;。…...

9-Oracle 23 ai Vector Search 特性 知识准备

很多小伙伴是不是参加了 免费认证课程&#xff08;限时至2025/5/15&#xff09; Oracle AI Vector Search 1Z0-184-25考试&#xff0c;都顺利拿到certified了没。 各行各业的AI 大模型的到来&#xff0c;传统的数据库中的SQL还能不能打&#xff0c;结构化和非结构的话数据如何和…...

区块链技术概述

区块链技术是一种去中心化、分布式账本技术&#xff0c;通过密码学、共识机制和智能合约等核心组件&#xff0c;实现数据不可篡改、透明可追溯的系统。 一、核心技术 1. 去中心化 特点&#xff1a;数据存储在网络中的多个节点&#xff08;计算机&#xff09;&#xff0c;而非…...

Python学习(8) ----- Python的类与对象

Python 中的类&#xff08;Class&#xff09;与对象&#xff08;Object&#xff09;是面向对象编程&#xff08;OOP&#xff09;的核心。我们可以通过“类是模板&#xff0c;对象是实例”来理解它们的关系。 &#x1f9f1; 一句话理解&#xff1a; 类就像“图纸”&#xff0c;对…...

统计学(第8版)——统计抽样学习笔记(考试用)

一、统计抽样的核心内容与问题 研究内容 从总体中科学抽取样本的方法利用样本数据推断总体特征&#xff08;均值、比率、总量&#xff09;控制抽样误差与非抽样误差 解决的核心问题 在成本约束下&#xff0c;用少量样本准确推断总体特征量化估计结果的可靠性&#xff08;置…...

Cursor AI 账号纯净度维护与高效注册指南

Cursor AI 账号纯净度维护与高效注册指南&#xff1a;解决限制问题的实战方案 风车无限免费邮箱系统网页端使用说明|快速获取邮箱|cursor|windsurf|augment 问题背景 在成功解决 Cursor 环境配置问题后&#xff0c;许多开发者仍面临账号纯净度不足导致的限制问题。无论使用 16…...