其实在 c++语言里面const修饰的才算是一个真正的常量,在 c 语言中 const 可以说是个“冒牌货”。为什么会这样?其实是 c++ 编译器对 const 进行了加强,当 c++ 编译器遇到常量声明时,不会像 c 语言一样给这样const对象单独分配内存,c 语言一般是放在只读数据区,而 c ++ 编译器是把const对象放在一个符号表里面(我个人觉得放在符号表里面的其中一个原因可能是想减少一些存储操作次数),至于符号表是属于内存布局(文章:你该知道你写的程序的内存布局)中的哪一块,我也不知道,写 c++ 编译器的人才知道。
昨天群友发文询问,为什么C语言里bool似乎占用4Byte,给bool赋值后,它后面的3个字节 内容也被修改了,并且她还强调代码没有经过编译器优化(-O0是关闭优化的意思)。
今天分享一个C语言宏定义小技巧,从语法上来看比较简单,不过一旦真正领悟到其精妙之处不仅可以简化代码、还能提高代码的可扩展性。X-MACRO宏技术的核心在于灵活的应用#define与#undef,对于玩C语言的伙计#define是再熟悉不过了,但#undef却鲜有人在实际的开发过程中熟练使用,基本上都是#define走天下。那#define的作用域是怎样的呢?其作用范围都是从宏定义处到文件结束,不管函数内外均可以随意使用。那一不小心使用#define重复定义相同的宏又会怎样呢?对于大部分编译器会报重复定义警告,但也有小部分编译器采用最近的宏定义直接通过,所以稍不留神就把bug引入到了代码中。其实对于C语言编程素养良好的工程师们多会使用#undef来限制宏定义的作用范围,即取消宏定义,以免造成宏泛滥。
最近看到APP上,给我推送了很多类似的回答,借此机会,也想着重新审视一下自己的学习历程,以及结合自身和大牛,分享一些学习经验,希望对大家有所启发和帮助。
SQLite是一个跨平台的轻量级数据库,支持C/C++开发,可用于嵌入式中,关于C/C++使用SQLite的简单实例,可参考这篇:“玩转SQLite6:使用C语言来读写数据库”,本篇来继续介绍SQLite的基础运算符与表达式。
在计算机科学中,内存泄漏指由于疏忽或错误造成程序未能释放已经不再使用的内存。
C语言使用函数调用,我们再熟悉不过了,但是函数调用在内存中究竟发生了什么真的清楚吗?只有搞清楚内存里的内幕,才算完全搞懂函数的调用。
有个粉丝关于条件编译的问题,程序一直编译报错。我整理了关键的部分,下面代码是头文件中的定义。
首先要看英文和C语言的关系,有多大层度是需要英文的支持。我们都知道C语言中一共有32个关键词,控制语句仅有9种,也就是说只需要掌握以上内容就可以对C语言进行应用,对于一些复杂的指针等更合英文没有关系。我相信短短的32个关键词根本难不倒各位同学吧。对于C语言的资料遍地都是,随着时间的推移越来越多的大神分享自己学习C语言的方法,将各种博客、文章、视频分享给大家,因此在学习C语言的时候根本不缺资料,作为一种主流的编程语言,是任何编程语言学习的前提。因此在资料方面根本不需要担心。
C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发。C语言能以简易的方式编译、处理低级存储器。C语言是仅产生少量的机器语言以及不需要任何运行环境支持便能运行的高效率程序设计语言。尽管C语言提供了许多低级处理的功能,但仍然保持着跨平台的特性,以一个标准规格写出的C语言程序可在包括类似嵌入式处理器以及超级计算机等作业平台的许多计算机平台上进行编译。
为什么会写篇栈变化的文章?做系统分析的话你肯定遇到过一些crash,oops等棘手问题,一般大家都会用gdb,objdump或者addr2line等工具分析pc位置来定位出错的地方。但是这些分析工具背后的本质原理就不见得理解深刻了,而且有的时候面对一系列backtrace或者st...
点击蓝字关注我们请把努力当成一种习惯,而不是三分钟热度。每一个你羡慕的收获,都是努力用心拼来的。相信人生不会亏待你。12月6日华清远见武汉中心迎来了嵌入式21111班的开班典礼班主任介绍班级班规无规矩不成方圆,班级班规的制定是为了让学生更加严于律己,也是为了方便班主任老师对学员进...
一直觉得C语言较其他语言最伟大的地方就是C语言中的指针,有些人认为指针很简单,而有些人认为指针很难,当然这里的对简单和难并不是等价于对指针的理解程度。为此在这里对C语言中的指针进行全面的总结,从底层的内存分析,彻底让读者明白指针的本质。01 指针变量首先读者要明白指针是一个变量,...
提到C语言,很多人的第一反应是:C语言,不都过时了?还有必要研究吗? 当然有必要。用一个词来形容:C生万物。听起来有点浮夸,但也没说错。现今这个世界上,几乎所有重要的软件都跟C有关系: 主流操作系统是C写的,绝大多数语言的编译器也是C写的,数据库、网络、硬件驱动、服务器应用等等,...
▼点击下方名片,关注公众号▼欢迎关注【玩转单片机与嵌入式】公众号,回复关键字获取更多免费资料。回复【加群】,限时免费进入知识共享群;回复【3D封装库】,常用元器件的3D封装库;回复【电容】,获取电容、元器件选型相关的内容;回复【阻抗匹配】,获取电磁兼容性、阻抗匹配相关的资料回复【...
▼点击下方名片,关注公众号▼欢迎关注【玩转单片机与嵌入式】公众号,回复关键字获取更多免费资料。回复【加群】,限时免费进入知识共享群;回复【3D封装库】,常用元器件的3D封装库;回复【电容】,获取电容、元器件选型相关的内容;回复【阻抗匹配】,获取电磁兼容性、阻抗匹配相关的资料回复【...
c语言入门C语言一经出现就以其功能丰富、表达能力强、灵活方便、应用面广等特点迅速在全世界普及和推广。C语言不但执行效率高而且可移植性好,可以用来开发应用软件、驱动、操作系统等。C语言也是其它众多高级语言的鼻祖语言,所以说学习C语言是进入编程世界的必修课。hello,world#i...
星标「嵌入式大杂烩」,一起进步!进度条的应用在软件中无处不在,拷贝一个文件需要一个进度条,加载一个文件也需要一个进度条,来标志完成与否。那么,一个进度条有哪些元素呢:一个不断向右生长的容器(直观的看出当前的进度)一个数据化反映进度的百分比。一个标志(这个标志反映这个进度条是否在工...
所谓的数组越界,简单地讲就是指数组下标变量的取值超过了初始定义时的大小,导致对数组元素的访问出现在数组的范围之外,这类错误也是C语言程序中最常见的错误之一。在C语言中,数组必须是静态的。换而言之,数组的大小必须在程序运行前就确定下来。由于C语言并不具有类似Java等语言中现有的静...
一、C语言的共用体union共用体是一种特殊的数据类型,允许您在相同的内存位置存储不同的数据类型。什么意思呢,就是在同一块内存存储可以定义多个数据类型,但是在使用的时候,只有一个变量有效。这里就有一个问题,变量有大有小呀,对的,所以这个时候共用体的空间为内部变量最大占用空间的值。...