首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C语言笔记】参宏定义(二)

我们可以使用命令gcc -E hello.c -o hello.i进行预处理,然后查看经过预处理得到的文件hello.i的内容,hello.i里的内容如下: ?...关于C程序的编译原理可查看往期笔记:【C语言笔记】C语言编译的过程关于windows系统下使用gcc编译器的方法可参考往期笔记:【C语言笔记】使用notepad++、MinGW来开发C程序 以上程序严谨的求平方的宏函数的定义如下...参宏到底有多重要,看看TI的一些官方例程就知道,其把很多算法使用参宏封装起来,用户就可以很方便的使用。 参宏—— clarke变换算法: ? 参宏—— PI调节器算法: ?...参宏与函数的区别 查看以上参宏,我们发现参宏似乎与函数似乎长得很像,它们之间有什么区别和联系呢?TI为什么要使用宏来对一些算法进行封装呢,难道使用函数来封装不可以吗?答案是可以的: ?...以上就是关于参宏的一些总结,如有错误,欢迎指出!

2.9K10
您找到你想要的搜索结果了吗?
是的
没有找到

C语言笔记】参宏定义(一)

其中DSP与FPGA通过两个参宏进行数据交互(DSP与FPGA通过一块共享内存来实现数据交互,我这边的DSP只要往共享内存中写入数据即为往FPGA中写数据,往共享内存中读取数据就是读取FPGA发送过来的数据...FPGA_READ(data_in, base_addr, offset) \ ((data_in) = (((volatile uint32*)base_addr)[(offset)])) 参宏也称做宏函数...volatile在嵌入式编程中用得很多,如在Cortex-M3内核MCU的内核文件的C函数内嵌汇编中使用了大量的volatile关键字: ?...关于volatile关键字更多的介绍可查看往期分享: 【C语言笔记】volatile关键字 ((volatile uint32*)base_addr)[(offset)]的意思是相对于base_addr...参宏很重要,在一定程度上可以帮助我们防止出错,提高代码的可移植性和可读性等,应重点掌握。下一篇笔记我们将分享更多的参宏的笔记,欢迎阅读。----

1.3K40

C语言】程序的翻译环境和执行环境

什么张三同学学了这么久竟然连ANSIC是什么都忘记了,怎么回事(doge) ANSIC实际上就是 美国国家标准协会(American National Standards Institute)协会制定的一个C语言的标准...任何C语言的编译器都在ANSIC的基础上扩充的。张三同学这个我们还是必须要了解的。...那么在上面说ANSIC的任何一种实现上都存在这两种不同的环境有⇣ 翻译环境→在这个环境源代码被转换为可执行的机器指令。  在我们所使用的编译器像Vs所扮演的就是这个翻译环境。 ...翻译环境 这幅图来表示下面所讲述的过程ヽ(✿゚▽゚)ノ 每个源程序也就是.c(可以是多个源程序)文件实际上都会经过编译器的处理,最后在各自生成一个目标文件.obj。...它的指令是:gcc test.c - E (预处理后就停止) Ⅱ→编译:把C语言的代码转换成汇编代码,那么肯定要做什么事情也就是我们所说的一个过程实际上有:语法分析、词法分析、语义分析、符号汇总(汇总全局变量的符号

96720

C语言 | 将“China”翻译成密码

例46:请编程序将“China”翻译成密码,密码规律是:用原来的字母后面第4个字符代替原来的字母。 解题思路:例子,字母“A”后面的第4个字母是“E”,用“E”代替“A”。...按照ASCII码表,后四个字母即为在原来的基础上加4就可以了,直接定义字符类型,最后输出也是字符类型,挨个输出,因此“China”应该翻译为“Glmre”。...字符所对应的ASCII码表值加4     c5=c5+4;//c5字符所对应的ASCII码表值加4     printf("翻译后的密码是:%c%c%c%c%c\n",c1,c2,c3,c4,c5);/.../输出结果      return 0;//主函数返回值为0  } 编译运行结果如下: 翻译后的密码是:Glmre -------------------------------- Process exited...C语言 | 将“China”翻译成密码 更多案例可以go公众号:C语言入门到精通

5.2K88

C语言翻译环境:预编译+编译+汇编+链接详解

翻译环境和运行环境 在ANSI C的任何⼀种实现中,存在两个不同的环境。 第1种是翻译环境,在这个环境中源代码被转换为可执行的机器指令。 第2种是运行环境,它用于实际执行代码。...可执行程序中存储的是二进制指令(机器指令) ⭐翻译环境 那翻译环境是怎么将源代码转换为可执行的机器指令的呢?这里我们就得展开开讲解⼀下翻译环境所做的事情。...其实翻译环境是由编译和链接两个大的过程组成的,而编译⼜可以分解成:预处理(有些书也叫预编译)、编译、汇编三个过程。...⼀个C语言的项目中可能有多个.c文件⼀起构建,那多个.c文件如何生成可执行程序呢? 多个.c文件单独经过编译器,编译处理生成对应的目标文件(后缀为.obj)。...就是根据汇编指令和机器指令的对照表⼀⼀地进行翻译翻译成机器语言(二进制指令),也不做指令优化。

10410

C语言参数的宏定义:#define f(X) ((X)*(X))

l 宏定义不是C语句,不必在行末加分号。l 对程序中用“”括起来的字符串内的字符,即使与宏名相同,也不进行置换。...l 宏定义可以嵌套使用,例如:#define R 3.0#define PI 3.14159#define L 2*PI*R 3.知识点:参数的宏定义l 一般形式:#define 宏名(参数表)...字符串l 参数的宏不占运行时间,只占编译时间;只是简单、机械字符替换;宏名无类型。...l 要注意有括号和没括号的区别 不带参数的宏定义比较简单,我们今天讲的是参数的。最后红色字体提到有括号、没括号的区别。那提一个问题:怎么用宏定义表示数学上的函数 f(x)=x*x ?...3*3; int a = f(3+1); int a = 3+1*3+1; int a = f((3+1)); int a = (3+1)*(3+1); 我们在宏定义的时候尽量就避免这个问题,使用参数的宏时

4.8K00

C语言必背18个经典程序,2022年C语言必背100码大全

一、C语言必背18个经典程序,C语言初学者必会 一个C语言入门初学者如何学代码,读代码和写代码,我想学代码不知道方向谁能给我指明一个方向?...只是他们逻辑功能不一样,那如何快速的上手C语言代码,建议多看多写,下面是小编整理的C语言必背18个经典程序。...二、C语言学习相关C语言必背18个经典程序展现 1、C语言必背18个经典程序第一个——乘法表。 用C语言输出9*9成法口诀。共9行9列,i控制行,j控制列。...6、C语言必背18个经典程序之三角形打印 编程打印直角杨辉三角形 7、C语言必背18个经典程序之平均分问题 通过键盘输入3名学生4门课程的成绩,分别求每个学生的平均成绩和每门课程的平均成绩。...9、第九个C语言必背18个经典程序 下面程序的功能是从字符数组s中删除存放在c中的字符。

1.3K20

C语言基础】:编译和链接(计算机中的翻译官)

一、翻译环境和运行环境 我们在Visual Studio上写的C语言代码其实都是一些文本信息,计算机是不能够直接执行他们的,计算机只能够执行二进制指令。...要想计算机执行我们所写的C语言代码,就需要一个"翻译官",将我们写的C语言代码"翻译"成计算机能够执行的二进制指令。而承当"翻译官"这个角色的就是我们常说的编译器。 1....翻译环境 在ANSI C的任何⼀种实现中,存在两个不同的环境。 第1种是翻译环境,在这个环境中源代码被转换为可执行的机器指令(二进制指令)。 第2种是执行环境,它用于实际执行代码。...1.1 编译 翻译环境是由编译和链接两个大的过程组成的,而编译又可以分解成:预处理(有些书也叫预编译)、编译、汇编三个过程。 编译过程: 每个.c源文件都是独立地通过编译器进行编译处理的。...上面程序进行词法分析后得到了16个记号: 语法分析(Syntax Analysis): 语法分析阶段,编译器根据C语言的语法规则检查记号流,构建一棵抽象语法树(AST)。

5910

29年前自学C语言,中国第一程序员,最终成为一文豪

他是浪漫的吟游诗人与“创伤文学”小说家,但他的另一个身份却鲜为人知——他还是中国第一程序员。 王小波和编程 超越时代的技术大牛 1991年,这时候的中国还没接入互联网。...马云正在在辗转经手小商品交易,艰苦养活刚创办的小翻译社; 马化腾正在大学里修读计算机,还没有涉足象牙塔外的水深火热; 雷军 倒是已经开始在计算机市场闯荡,在著名的金山软件实习…… 而此时的王小波,已经独立开发出了一款类似于...得益于去匹兹堡留学接触到了国外先进的计算机知识,他先后学了 Fortran、汇编语言C 语言。 在90年,计算机并不智能,没有当今眼花缭乱的软件应用,有的只是一些基础功能。...他用C++语言写出了中文输入法、编辑器以及多媒体系统。一种类似Word的软件被他开发出来,用来辅助日常的写作。 闲着没事搞了个发明。原有中文软件是用线扫描方式出汉字。...INTEL又总能推出新一CPU,将来还有大发展。买微机钱的投资是大事,时间、精力投资更为巨大,买386兼容机是明智之举。 我最近可能调入人大,投奔班长。

5972319

【算法随记六】一段Matlab版本的Total Variation(TV)去噪算法的C语言翻译

直接按照代码的意思用C语言把他们展开并不做其他的优化可得到大概下面这种不怎么好的代码: int IM_DualTVDenoising(unsigned char *Src, unsigned char...= (float *)malloc(Width * Height * sizeof(float)); int X, Y; float q1, q2, q, abs_c;...= sqrt(LineP3[X] * LineP3[X] + LineP4[X] * LineP4[X]); abs_c = 1 / (1 + tao * abs_c...); LineP1[X] = (LineP1[X] + tao * LineP3[X]) * abs_c; LineP2[...上面的C语言还是可以继续优化的,这就需要大家自己的认真的去研读代码深层次的逻辑关系了,实际上可以只要上面的一半的临时内存的,而且很多计算可以集中在一个循环里完成,可以手动内嵌SIMD指令,或者直接使用编译器的优化能力

99730
领券