
C
文章平均质量分 53
分享自己在学习以及工作路上中遇到的一些关于C语言方面的知识和经验
OMGMac
不坠青云之志
展开
-
解决提示”warning C317 attempt to redefine macro ‘XX‘“问题
而为什么编译器会这样提示呢?是因为我发现原来我的这个宏定义出现在了两个头文件中,跟重复定义变量是一样的道理,所以编译器在编译时候才会提示该语法错误。因此错误原因就是重复定义或者多次定义该宏造成的,解决方法也很解决保持唯一性,只定义一个即可!今天来分享一个之前在开发时候遇到的一个告警,是一个关于不正当使用宏定义产生的告警。好了,今天的分享就到这里了~原创 2024-10-24 16:01:56 · 1104 阅读 · 0 评论 -
keil中编译遇到错误“error #94-D the size of an array must be greater than zero”解决方法
这一期,我们来看一个在keil中编译时候遇到定义数组元素个数为0时候遇到的一个错误。原创 2024-10-19 17:31:47 · 705 阅读 · 0 评论 -
出现错误提示“error: expected ‘=‘, ‘,‘, ‘;‘, ‘asm‘ or ‘__attribute__‘ before ‘->‘ token xxxx;”的原因
这次来分享一个之前因为疏忽而出现的一个错误例子,话不多说,我们直接先来看错误,错误提示我们:"error: expected identifier or '(' before 'else' else{""error: expected '=', ',', ';', 'asm' or '__attribute__' before '->' token xxxx""error: expected identifier or '(' before '}' token}"原创 2023-06-17 18:02:53 · 2993 阅读 · 0 评论 -
讲解为什么会提示“invalid type argument of ‘->‘ (have ‘Data_Ao‘)”错误信息
这里的adata是我定义的一个指针,指向对于的一个结构体,而ao[]我是定义成了一个结构体变量,所以adata采用->指向ao[3]—(adata->ao[3])的用法是正确的,而后面我结构体变量ao[3]这里使用->指向flag就不正确了,因为ao[3]只是一个结构体变量,其指向自己内部的参数,只需要使用"."即可~今天分享一个之前遇到的错误提示,其实就是语法的错误。可能如果对“->”或者“.”的用法不了解,就会容易造成这样的错误,加上如果你的编译器不会提示一下基础的语法错误,就更容易出现。原创 2023-03-06 21:51:44 · 4156 阅读 · 1 评论 -
如何解决提示错误“error redefinition of ‘dev‘”或者“note previous definition of ‘dev‘ was here dev”
今天我们来分享一个我们在编程时候可能会遇到的一个错误提示,其实这个错误提示跟我们之前讲过的有一篇文章(文章链接:[解决提示“previous definition of...“或者“conflicting types for...“问题方法](https://blog.youkuaiyun.com/OMGMac/article/details/129150871))很相似,都是因为重复的定义一个变量造成的。原创 2023-03-04 12:43:11 · 3796 阅读 · 0 评论 -
C规范编辑笔记(十四)
规则——不要使用 setjmp() 和 longjump() 函数。另外建议错误返回相应的数字来代表不同情况下的错误,不建议使用exit();原创 2023-01-22 21:45:19 · 1439 阅读 · 0 评论 -
C规范编辑笔记(十三)
另外有必要将内存区域与其用途相关联:表示不同值的数据存储在单独的内存空间中。如果共享内存区域被回收,请确保在重新使用之前将其擦除。 一旦程序不再需要访问这些数据,就必须明确删除所有包含敏感数据的内存区域原创 2023-01-21 14:51:33 · 940 阅读 · 1 评论 -
C规范编辑笔记(十二)
这里说的是“扩大”,我们知道,realloc是从堆上分配内存的,当扩大一块内存空间时, realloc()试图直接从堆上现存的数据后面的那些字节中获得附加的字节,如果能够满足,自然天下太平。也就是说,如果原先的内存大小后面还有足够的空闲空间用来分配,加上原来的空间大小= newsize。2、如果原先的内存大小后面没有足够的空闲空间用来分配,那么从堆中另外找一块newsize大小的内存。放假了,就把这个C规范编辑笔记更新完吧,估计应该还可以更新两三篇估计就结束了,今天我们来讲第十二篇,话不多说,直接开讲~原创 2023-01-20 10:51:32 · 1843 阅读 · 0 评论 -
C规范编辑笔记(十一)
C 语言可以将结构作为函数的参数传递。然后将它们复制到堆栈中。然而,这对性能不利,并增加了堆栈溢出甚至敏感数据泄漏的风险。 与结构对应的参数必须以 const 限定指针的形式传递。然后仅将结构的地址复制到堆栈。此外,const 修饰符可防止更改指向的对象。原创 2023-01-19 15:38:51 · 1014 阅读 · 2 评论 -
C规范编辑笔记(十)
这个我们就不说明了,定义函数都需要一个函数原型/声明,而静态函数因为作用域只在自己定义的文件中,所以就不需要函数声明/原型。原创 2023-01-19 15:00:03 · 946 阅读 · 0 评论 -
C规范编辑笔记(九)
当然如果你不想让别人去轻易上手你的代码,你可以加点自己的想法进去~ 当然我这里的目的是告诉你规范编写。包含多重赋值的代码很难阅读,也很难维护。5、C语言有许多运算符,根据它们的结合性有不同的优先级。但是,表达式中没有括号,很难理解和校对。今天我们来分享一下C规范编辑笔记第九篇,话不多说,我们直接来看~好了,第九篇C规范编辑笔记分享我们就到这里了,我们第十篇见~原创 2022-12-27 17:41:37 · 488 阅读 · 2 评论 -
C规范编辑笔记(八)
在释放指针所指向的内存之后,指针变量仍然存储它的地址。这就是所谓的悬空指针。所以建议释放了内存后,如果有指向此内存地址的指针,建议将其指针赋值为NULL,这样可以保证指针不再指向任何有效的存储区域,保证存储区域的数据不会被破坏掉。因为只在同一数组里面进行操作才是有效的,不同数组进行减法和比较原则上是错误的,且无意义的。所以,建议在创建数组时候不要不定义其数组大小,但是有时候我们经常这么创建数组。本人水平有限,上述信息仅供学习参考,如有错误和不妥之处,请多多指教。类型相关联,这会导致未定义的行为。原创 2022-12-18 22:34:38 · 331 阅读 · 2 评论 -
C规范编辑笔记(七)
从上述两个例子可以对比看出,第一个不好的例子因为将s_a的结构体变量显示转换为s_b结构体类型,造成指针p后面指向的内存空间大小变为了s_b的大小,而超出了s_a本身结构体的范围,所以就会报错,而好的例子中采用包含s_a结构体完美的解决了这个问题。大家好,今天来分享一下C语言规范编辑笔记的第七篇,分享这个是希望自己后面忘记了可以去复习一下,同时也希望分享给有需要的小伙伴,所以在每一篇的开头,我都加了以往文章的链接~本人水平有限,上述信息仅供学习参考,如有错误和不妥之处,请多多指教。原创 2022-12-11 19:23:58 · 439 阅读 · 0 评论 -
C规范编辑笔记(六)
结构体变量不得在未指定初始化值的情况下进行初始化,并且必须初始化结构变量的每个字段/元素。原创 2022-12-06 23:08:33 · 232 阅读 · 0 评论 -
C规范编辑笔记(五)
为了避免未定义的行为,只有本身被限定为volatile的指针才能访问volatile变量原创 2022-11-26 15:53:22 · 548 阅读 · 0 评论 -
C规范编辑笔记(四)
以大写形式声明常量, 为避免误解,常量值必须根据其类型使用后缀原创 2022-11-21 22:56:42 · 520 阅读 · 0 评论 -
解决“ warning C276: constant in condition expression“和“warning C294: unreachable code“两个告警提示
好久不见,最近因为一些项目比较忙,都没怎么发文章了,今天有空就来分享一下自己之前遇到的两个告警。原创 2022-11-13 22:07:52 · 19412 阅读 · 1 评论 -
解决“warning C280 ‘xxx‘ unreferenced local variable”告警方法
再分享一个常见的告警提示,相信大家在刚接触C语言时候会遇到这种告警提示:**“warning C280 'xxx' unreferenced local variable”**原创 2022-11-06 23:27:32 · 16678 阅读 · 0 评论 -
解决“error C267 ‘Beep_Led_yellow‘ requires ANSI-style prototype”错误方法
今天给大家分享一个大家可能经常见的错误提示:**error C267 'Beep_Led_yellow' requires ANSI-style prototype**原创 2022-11-06 23:00:56 · 17429 阅读 · 2 评论 -
C规范编辑笔记(三)
继上篇我们的C规范编辑笔记(二)后,我们今天开始分享第三篇笔记,话不多说,我们开始~1、一个 tab 键盘等于四个空格键。我们在编程的时候最好使用空格键而不是使用 tab 键,当两个编译器的 tab 键设置的大小不一样的时候,代码移植的时候代码的格式就会变乱,而使用空格键则不会出现这种问题。这个问题在我们用到不同的编译器时候体现的最明显,有些编译器默认的是一个tab占两个空格,比如keil,因此如果我在使用keil时候都会修改tab的大小值,所以建议使用空格。2、建议 - 启用允许检测有符号整数溢出的编译器原创 2022-10-24 22:07:21 · 3576 阅读 · 1 评论 -
解决“L6200E Symbol xx defined (by xx.o and xx.o)”重复定义问题
今天来分享一个关于自己之前遇到的一个问题,就是关于**重复定义**会造成的一个错误。错误提示为:原创 2022-10-16 12:50:14 · 3192 阅读 · 2 评论 -
C规范编辑笔记(二)
今天我们来继续分享C规范编辑笔记–第二弹原创 2022-09-19 21:08:18 · 340 阅读 · 0 评论 -
C规范编辑笔记(一)
我们在规范的头文件的开头都会看到上述的例子形式的预编译以及宏定义,而为什么要这样子呢,其实也是防止头文件被多次重复包含~,一是会出现不可预测的错误,二是会造成编译速度减慢。我们知道C语言中的标识符是可以下划线开头,但是自定义的宏是不可以,因为下划线开头的宏是预定义宏(C定义的),所以不能以下划线开头。对于这一点其实,其实只是为了更加规范编写和美化程序,不按顺序也没有关系,但是这样子会让你的代码更加规范性,因此还是建议这样做。本人水平有限,上述信息仅供学习参考,如有错误和不妥之处,请多多指教。原创 2022-09-05 23:13:07 · 1556 阅读 · 0 评论 -
处理告警“ warning #69-D integer conversion resulted in truncation”的方法
教你如何处理告警“ warning #69-D integer conversion resulted in truncation”的方法原创 2022-08-27 22:56:45 · 11860 阅读 · 3 评论 -
解决“error #147 declaration is incompatible with xxx xxx (declared at line xx)”问题
今天分享一个很奇怪的问题,为什么说奇怪,因为今天分享的这个错误是我在移植代码时候遇到的,在其他人的工程中可以正常运行,而我自己的就运行报错,于是来给大家分享一下,说不定有小伙伴知道呢~......原创 2022-08-26 22:01:56 · 19785 阅读 · 3 评论 -
分享一个使用三目优先级遇到的优先级问题
之前在使用三目运算符时候遇到了一个优先级问题,索性今天拿出来跟大家分享一下,我们知道C语言中的运算符是有优先级的,但是这么多有时候大家会记不住,就会出现一些优先级循序造成的错误,比如今天我分享的这个例子。大家可以先看以下这段代码:其运算结果为:可以看出a/b和a1/b1的运算式仅仅只是差了一个“()”结果就不一样,这里我们分析一下原因,首先,第一条a与a1的运算因为“”的优先级大于“&”,而三目条件运算符“?:”的优先级比这两个都低,因此"0x010x01"会先进行比较,比较结果为1,再与变量c进行原创 2022-07-05 23:52:52 · 235 阅读 · 0 评论 -
解决“error ‘else’ without a previous ‘if’”错误
今天来跟大家分享一个可能很不常见的错误,因为这个错误可能真的很少见,大部分会想到这样也会错误。我们先看一下错误提示:error ‘else’ without a previous ‘if’。其意思是else前面缺少一个if,而发现这种错误原因往往是if和else if或者与else之间被打断,比如我们看下面的代码:因为“a++;”这一句在if和else if的中间,所以造成条件语句不连续,因此产生错误。大家可以把代码复制过去试试看就知道了。然后把a++这句注释掉之后再编译即可成功运行。本人水平有限,上述原创 2022-06-13 23:34:50 · 24818 阅读 · 0 评论 -
引起Run-Time Check Failure #2 - Stack around the variable ‘data‘ was corrupted的原因
分享一个自己最近遇到的一个编译异常警告,异常提示为:Run-Time Check Failure #2 - Stack around the variable ‘data’ was corrupted,如图所示:这个是我在VS下面编译时候遇到的异常。很奇怪,翻译过来,提示我data变量周围的堆栈已损坏。因为当时写的程序用到了一个没有指定大小的数组,如下:然后编译后就提示出现异常,然后就弹出上述提示。然后我就将数组的大小指定:其实出问题就在于我没有指定这个数组的大小,所以才会提示我data变量周围的堆栈损原创 2022-06-02 23:21:06 · 1647 阅读 · 0 评论 -
解决“error expected ‘;‘ before ‘}‘ token”问题
分享一个经常自己经常遇到的一个编译错误问题,就是**error expected ‘;’ before ‘}’ token”**这个问题,今天在编程时候又遇到了。于是拿出来跟大家分享一下。其实这个问题是我们遗忘了一个“;”分号造成的,就是在“}”下括号前忘记加了相应的“;”。因此,解决方法就是如果发现了编译器报这种错误,可以去代码相应位置看看是不是缺少";"造成的。大家如果没有遇到过相应的错误或者对错误不理解的话,我这里写了一下会报错的代码段给大家,大家可以找一个编译器试试看,代码段里面我少了一个";"原创 2022-06-02 22:02:32 · 46633 阅读 · 0 评论 -
带你用一个更好的方法注释掉一段代码
今天分享一个好用的注释代码块的方法给大家~话不多说,我们平时常用的注释一句代码和文字就用“//”或者“/* */”,如://char a = 0; /*这是一个常用的注释方法*/但是我们如果注释一大块内容呢,就会用到上面提到的“/* * /"了。但是这个方法不适应用于代码块中存在“/ * */"的情况,如下面两张图对比来看:上面的第一张图是正常对比图,而第二张是注释整个代码块的图片,可以看出,当采用“/ **/"会发现代码块为完全注释掉,因此这种方法也有缺点。所以这里我们原创 2022-05-07 23:24:24 · 9048 阅读 · 1 评论 -
运算符“|“和“||“以及“&“和“&&“的区别
今天来说一下运算符"|“和”||“以及”&“和”&&"的区别我们知道"|“和”||“是或的意思,指的是或运算;”&“和”&&"是与的意思,指的是与运算。但是“||”和“&&”在执行效率上面比“|”和“&”高。比如,举个例子如下,使用"|“时候,程序会将a == b 判断完后,无论其结果是否正确,都会继续判断a == 2,也就是判断了两个;而使用”||"时候,程序依然会先判断a == b 是否相等,如果相等则说明条件式成立,程序将不原创 2022-03-20 20:34:34 · 3083 阅读 · 0 评论 -
带你认识什么是一级指针、二级指针、三级指针
今天带大家了解一下什么是一级指针、二级指针、三级指针1、一级指针一级指针其实就是我们平时常见的普通指针如:int a = 12; int * b = &a; //一级指针,定义一个指针变量b,将整型变量a的地址(指针)赋值给b所以首先我们介绍一下什么是指针?指针其实是一个内存地址,对于一个内存单元来说,单元的地址即为指针。而我们平时常用的指针则是指针变量。指针变量从字面意思上可以看出是存储指针的一种变量类型。在C语言中,允许用一个变量来存放指针,这种变量称为指针原创 2021-12-26 12:15:44 · 11670 阅读 · 2 评论 -
keil编译时候产生的错误(Error: L6200E: Symbol....)解决方法
今天分享一个自己在做实验时候发现的一个错误问题,查了一下网上也有人遇到这样的问题,就拿出来分享了一下自己遇到的情况。首先看keil的错误提示,如图所示可以看到两个抱错,原创 2021-12-17 13:06:16 · 57272 阅读 · 5 评论 -
教你如何用C语言做一个简单的贪吃蛇
小时候大家可能都玩过贪吃蛇,但有没有想过自己做一个出来玩玩看。今天我们就教大家用C语言做一个简单的贪吃蛇游戏。这里没有采用图形界面去做,而是采用win32控制台。首先,先把做好的游戏初始界面和游戏截图先展示一下。原创 2021-06-02 20:44:02 · 41481 阅读 · 14 评论 -
用延时函数时候给变量定义类型,char和int我推荐用int
刚才在编写代码时候,通过查询方式来检测按键是否按下,这里我们需要用一个延时函数来去抖动。所以我就写了一个延时函数来去抖。在定义延时函数时候我把变量定义为char,因为我觉得char只有八位嘛可以节省内存嘛,没想到后面因为这个让我困惑了一会。因为当我在proteus上面仿真时候,一按下按键,程序就跑了好多次。当时我定义的程序如下:一开始我还以为是定义太小了就把500改成1000,把112改成1120发现按键按下还是会执行多次,我才发现原来是定义错了,应该定义为int。可以看到我delay()函数里面的数原创 2021-05-01 13:50:28 · 1086 阅读 · 1 评论