硬件:RT-Thread官方ART-PI H750开发版,正点原子4.3寸RGBLCD屏(800*480) 软件:开发环境 MDK 或 RT-Thread Studio 1.1.5,TouchGFXDesigner v4.15 和 STM32CubeMX V6.0.1,env工具
计算机科学里的宏是一种抽象(Abstraction),它根据一系列预定义的规则替换一定的文本模式。解释器或编译器在遇到宏时会自动进行这一模式替换。对于编译语言,宏展开在编译时发生,进行宏展开的工具常被称为宏展开器。宏这一术语也常常被用于许多类似的环境中,它们是源自宏展开的概念,这包括键盘宏和宏语言。绝大多数情况下,“宏”这个词的使用暗示着将小命令或动作转化为一系列指令。
在代码目录下打开cmd命令行或打开VSCode中的命令行,VS Code快捷键是【Ctrl】+【~】
Keil C51是51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。Keil提供了包括C编译器、宏汇编、链接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(μVision)将这些部分组合在一起。如果你使用C语言编程,那么Keil几乎就是你的不二之选,即使不使用C语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会令你事半功倍。 •可以在公众号后台回复『043』或『keil』获取下载链接。
Keil C51是51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。Keil提供了包括C编译器、宏汇编、链接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(μVision)将这些部分组合在一起。如果你使用C语言编程,那么Keil几乎就是你的不二之选,即使不使用C语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会令你事半功倍。
基本上,没有人会将大段的C语言代码全部塞入 main() 函数,更好的做法是按照复用率高,耦合性低的原则,尽可能的将代码拆分不同的功能模块,并封装成函数。C语言代码的组合千变万化,因此函数的功能可能会比较复杂,不同的输入,常常产生不同的输出结果。
在C/C++中,所有的代码在输出结果前都需要经过这五个阶段:预编译—>编译—>汇编—>链接—>执行代码。其中前四个阶段是在翻译环境下进行,因为在翻译环境中有编译器和链接器这两个重要工具,二者配合能将文本形式的代码转化为对应的二进制代码和可执行文件;而最后一个阶段是在执行环境中进行的,代码在这个阶段已经打包好了,只需要执行器运行此代码,结果就能很好的输出。可以看出,整个代码运行逻辑是极其严谨和巧妙的。除程序环境外,C/C++在预处理阶段还有各式各样的预处理指令等着我们去发掘,一起来看看吧!
基本上,没有人会将大段的C语言代码全部塞入 main() 函数。更好的做法是按照复用率高、耦合性低的原则,尽可能的将代码拆分不同的功能模块,并封装成函数。
解释: 文件名1:生成的可执行文件的文件名 (示例: hello.exe) 文件名2: 带编译的源文件 (示例: hello.c)
市面上大部分C程序员对宏存在巨大的误解甚至是恐惧,并因此极力避免宏的适度使用,甚至将宏在封装中发挥正确作用的行为视作是对C语言的“背叛”——震惊之余,对于为什么大家会有这种想法的原因,我曾经一度是非常“傲慢的”,这种傲慢与某些人宣称“穷人都是因为懒所以才穷”时所表现出的那种态度并无任何本质不同——然而我错了,在闲暇之余认真看了不少经典的C语言教材后我才意识到:
要是用外存储器中的信息,应先将其调入内存储器。 进制是程序的执行过程。 循环队列是队列的一种顺序存储结构。 栈先进后出,队列先进先出。 结构化程序的基本结构有:顺序结构、选择(分支)结构和重复(循环结构)。 软件是指与计算机系统操作有关的计算机程序、规程、规则,以及可能有的文件、文档及数据。 在数据库中存储的是数据以及数据之间的联系。 关系模式是用来记录用户数据的二维表。 在一C语言程序中可以进行多种算法的实现,对算法的个数没有规定。 C语言中标识符由
上一篇我们讲的聊聊C语言-我的地盘我做主,相信大家对变量的存储类型和变量的作用域有了一定的了解。现在我们马上公布上期的答案如下: #include<stdio.h> int a=1;//存储在程序的数据段 int b;//存储在程序的bss段 int main(void) { auto int a=2;//存储在栈中 static int c=2;//存储在数据段 { int c=3;//存储在栈中 int b=4;//存储在栈中 } printf("a=%d b=%d c=%d\n",a,b,c); re
如今,市面上编程语言几百种,很多人觉得Python、 JAVA这种语言比较火,是不是C语言就不行了呢?
C语言中EOF的意思 今天跟大家说道说道这个C语言中EOF是什么意思。 相信很多朋友在学习C语言过程中,都看到过EOF的字样,但翻过整本C语言的书,也没有看到有这个函数或者关键字的,岂不是感觉很奇怪?难道学的不细有疏漏吗?当然不是!这里笔者告诉您一个技巧,如果您在看代码过程中,看到特殊的字符感觉不是关键字也不是函数,那您首先要想到的就是:这个东西是不是#define或者typedef过的呢? 直接开门见山的说,比如ACM比赛经常有这样的代码:while(scanf(“%d%d”)!=E
在之前已经分享了 【Linux】vim的使用,这次来看看在云服务器上的编译器gcc。
先来简单回顾一下c语言的文件操作,fopen,fread,fwrite,fclose等,我们在linux下简单编写代码实践一下:
freopen("CONOUT$", "w", stdout);//重定向输出到控制台
相信很多朋友在学习C语言过程中,都看到过EOF的字样,但翻过整本C语言的书,也没有看到有这个函数或者关键字的,岂不是感觉很奇怪?难道学的不细有疏漏吗?当然不是!这里笔者告诉您一个技巧,如果您在看代码过程中,看到特殊的字符感觉不是关键字也不是函数,那您首先要想到的就是:这个东西是不是#define或者typedef过的呢? 直接开门见山,比如ACM比赛经常有这样的代码:while(scanf("%d%d")!=EOF) 这玩意啥意思呢?首先scanf你写while里就很奇怪了,初学者表示没见过这么嵌套写的,再
在我们看球赛时,常常会留意到许多球星,比如:梅西,姆巴佩,乔丹,科比等等...,但我们也知道,"梅西","乔丹"等这类称呼并不是他们的本名,而是国内的人们为了方便称呼他们而起的昵称.
预处理主要是处理以#开头的命令,例如#include <stdio.h>等。预处理命令要放在所有函数之外,而且一般都放在源文件的前面。
个人主页:天寒雨落的博客_CSDN博客-C,CSDN竞赛,python领域博主 💬 刷题网站:一款立志于C语言的题库网站蓝桥杯ACM训练系统 - C语言网 (dotcpp.com) 特别标注:该博主将长期更新c语言内容,初学c语言的友友们,订阅我的《初学者入门C语言》专栏,关注博主不迷路! 目录 前言 文件包含 #include 两种格式 #include<头文件名称> #include"头文件名称" 头文件包含的顺序 宏定义 宏 嵌套宏 举例 有参数的宏定义 格式 举例 易错点 总结 -
最早的C语言仅仅用来编写小而美的代码,总共不超过100行,随着计算机软件的发展,小程序变成了大型软件工程,整个项目是由多人协同开发完成的,一个人显然已经玩不动了,这时候也就出现了模块化编程的概念。
我们在很多地方都有看到过K&R C、ANSI C、ISO C、C89、C99、C11等标准,具体有什么不同呢?(文末有个很好的实例)
最近选择一款文本编辑器,我的需求就是打开关闭简单,轻量级,能保存上次关闭的文件清单,支持一些常见的语言风格,开源免费的。除了UE、Notepad++外,可以有什么文本编辑器能替代?
当我们涉猎的范围越来越广之后我们会发现,每一种语言都有其对应的文件操作,包括面向过程语言C、面向对象语言C++/java、静态编译语言go、解释型语言python,甚至包括脚本语言shell 等等,最令人苦恼的是这些语言的文件操作接口都不相同,导致我们的学习成本非常高。
前面题目主要是自定义函数的题,相信经过这些题目的训练,大家对自定义函数的理解想必更近了一步。接下来呢,我们主要来练习跟自定义函数异曲同工的宏定义,先看看下面这题 题目描述 三角形面积=SQRT(S*(S-a)*(S-b)*(S-c)) 其中S=(a+b+c)/2,a、b、c为三角形的三边。 定义两个带参的宏,一个用来求area, 另一个宏用来求S。 写程序,在程序中用带实参的宏名来求面积area。 输入 a b c三角形的三条边,可以是小数。 输出 三角形面积,保留3位小数 样例输入 3 4 5 样例输出
以上就是c语言中预处理器的介绍,希望对大家有所帮助。更多C语言学习指路:C语言教程
在原来的C语言中,enum、const、auto等关键字都不尽完善,并没有发挥应有的功能,是二等公民,而随着时间的推移,在C++中他们都被完善了,有些还被赋予了新的功能,担当起了重要的角色。相反,原本在成员中称王称霸的一等公民,比如macro宏,在C++中成了贱民,惨遭抛弃。下面我们来仔细看看各种情况。
前面,我们既一起研究了自定义函数的题,有看了宏定义的题,下面这题刚好就是要用自定义函数和宏定义解题的,帮大家巩固知识点 题目描述 分别用函数和带参的宏,从三个数中找出最大的数。 输入 3个实数 输出 最大的数,输出两遍,先用函数,再用宏。 保留3位小数。 样例输入 1 2 3 样例输出 3.000 3.000 大家会发现宏定义比自定义函数简单,方便,但自定义函数的功能更加强大 PS:宏定义只是简单的宏替换 详细题解见C语言网题库1041题 比赛也打完了,不知道大家有没有取得理想的成绩呢,下期我们来看看有哪
VBA编程是Office系列软件自带的编程功能,也就是说不只是Excel,Word和PPT也能进行VBA编程。而“宏”可以理解为一组自动化程序,执行一个宏就能执行其对应的一系列操作。创建宏主要有两种方法,一种是录制宏,也就是将人的一些操作录下来,需要的时候执行宏就可以自动重复这些操作;另一种就是本文要介绍的,通过VBA编程来自己写一个宏。
预处理命令可以改变程序设计环境,提高编程效率,它们并不是 C 语言本身的组成部分,不能直接对它们进行编译,必须在对程序进行编译之前,先对程序中这些特殊的命令进行“预处理” 。 经过预处理后,程序就不再包括预处理命令了,最后再由编译程序对预处理之后的源程序进行编译处理,得到可供执行的目标代码。C语言提供的预处理功能有三种,分别为宏定义、文件包含和条件编译,下面将对它们进行简单介绍: 宏定义:在 C语言源程序中允许用一个标识符来表示一个字符串,称为“宏” ,被定义为“宏”的标识符称为“宏名”。在编译预处理时,对
预处理器是C语言编译过程中的一个重要组成部分,它负责在实际的编译之前对源代码进行一系列的预处理操作。预处理器指令以#开头,用于在编译之前对源代码进行宏替换、条件编译和文件包含等操作。
C89 标准库总共划分为 15 个部分,每个部分用一个头文件描述,C99 标准新增了 9 个(为了简化学习,这里暂不提 C11 标准),总共有 24 个头文件。
通常的目标是:书写一个像包含一个单独的函数调用语句的宏, 这意味着:调用者需要提供最终的分号,而宏体则不需要。因此宏体不能为简单的括弧包围的复合语句,因为如果这样,调用的时候就会发生语法错(明显是一个单独语句,但却多了一个分号)。
前面基本完成了动网格专题的发布,不过还是有一些内容并没有更新进去,比如说in-cylinder、接触检测、2.5D网格重构等。不过这些都是小技巧,写起来挺麻烦,以后有时间再通过案例视频的方式讲解好了。从今天开始最近一段时间准备发布Fluent UDF的一些内容。
这是我13年前创作和发表在互联网上的文章,这么多年过去了,这篇文章仍然在到处传播。现在贴回Linuxer公众号。 全文目录: C语言嵌入式系统编程修炼之道——背景篇 C语言嵌入式系统编程修炼之道——软件架构篇 1.模块划分 2.多任务还是单任务 3.单任务程序典型架构 4.中断服务程序 5.硬件驱动模块 6.C的面向对象化 总结 C语言嵌入式系统编程修炼之道——内存操作篇 1.数据指针 2.函数指针 3.数组vs.动态申请 4.关键字const 5.关键字volatile 6.CPU字长与存储器位宽不一致处
链接:https://pan.baidu.com/s/12Eb8tg20dZcazGBiwFO3ng
在单片机开发中,总有一些C语言基础知识是常常用到的而我们又不易掌握的,今天以STM32单片机为例,总结一下那些常用的C语言基础知识,例如逻辑运算符,结构体,宏定义以及按位运算符。
作为学计算机以及与计算机有关的专业,我们总不能报考office吧,哈哈,c作为报考最多以及最开始所学的专业,本文我们就用c语言的计算机二级考试来书写。
前段时间一个刚转到C语言的同事问我,为什么C会多一个头文件,而不是像Java和Python那样所有的代码都在源文件中。我当时回答的是C是静态语言很多东西都是需要事先定义的,所以按照惯例我们是将所有的定义都放在头文件中的。事后我再仔细想想,这个答案并不不能很好的说明这个问题。所以我在这将关于这个问题的相关内容写下来,希望给大家一点提示,也算是一个总结
在编程领域里的宏是一种抽象(Abstraction),它根据一系列预定义的规则替换一定的文本模式。解释器在遇到宏时会自动进行这一模式替换。绝大多数情况下,“宏”这个词的使用暗示着将小命令或动作转化为一系列指令。 在RAC框架中,其宏定义的功能强大能帮助开发者更加快速、便捷地进行开发工作。常用的比如:打破循环引用、以及KVO方法的属性监听等等。
在选择文本编辑器之前,首先明确了自己的需求和偏好,这有助于更快地找到合适的工具。以下是考虑的一些标准:
1.空文件也要在磁盘中占据空间,因为文件属性也是数据,保存数据就需要空间。 2.文件=内容+属性 3.文件操作=对内容的操作or对属性的操作or对内容和属性的操作 4.标识一个文件必须有文件路径和文件名,因为这具有唯一性。 5.如果没有指明对应的文件路径,默认是在当前路径下进行文件访问,也就是在当前进程的工作目录下进行文件访问。如果想要改变这个目录,可以通过系统调用chdir来改变。 6.在C语言中,调用fread、fwrite、fopen、fclose、等接口对磁盘中的文件进行操作,实际上必须等到代码和数据加载到内存中,变成进程之后,cpu读取进程对应的代码,然后操作系统才会对文件进行操作,而不是只要我们一调用文件操作的接口就会对文件操作,而是必须将这些接口加载到内存之后,才可以。 所以对文件的操作,本质上就是进程对文件的操作!!! 7.一个文件要被访问,必须先被打开。用户进程可以调用文件打开的相关函数,然后操作系统对磁盘上相应的文件进行处理。在磁盘上的文件可以分为两类,一类是被打开文件,一类是未被打开的文件。 8.所以,文件操作的本质就是进程和被打开文件的关系。
1. 知识点一:查看整数范围 当前的编译环境下,你可能不知道int的数据范围是多少,或者记不清无符号短整型的范围是0~65535还是0~65536?这时候就可以按照如下程序进行输出查看: #inclu
C语言的数据类型 C语言的数据类型 (1)输入输出 #include <stdio.h> int main(int args, const char *argv){ //单纯字符串输出 puts("hello world"); //格式化输出 printf("hello %s\n","alicfeng"); //输入 char username[10]; int age; gets(username);//很危险的做法 推荐不使
ANSI C标准(是美国国家标准协会(ANSI)对C语言)规定可以在C源程序中加入一些“预处理命令”,以改进程序设计环境,提高编译效率。这些预处理命令时有ANSI C统一规定的,但它不是C语言本身的组成部分,不能直接对它们进行编译,需要在编译之前对这些特殊指令进行处理,这个过程即“预处理”。经过预处理后程序可由编译程序对预处理后的源程序进行通常的编译,得到可供执行的目标代码。
在c语言编程过程中,大多数程序在产生输出之前都需要对数据进行运算。这些数据需要临时存储在内存之中(当计算机需要记忆这些数值时就会在内存中进行存储),数据的类型可以大体的分为两类,整型,浮点型。整型数据可以理解为数学概念上的整数,而浮点型则是数学概念上的小数。比如1,5,100是整型的数据。3.14,5.20是浮点型的数据。
本文总结nan和inf在C语言当中的含义、产生和判定方法。 C语言当中的nan 表示not a number,等同于 #IND:indeterminate (windows) 产生: 对浮点数进行了未定义的操作;
领取专属 10元无门槛券
手把手带您无忧上云