C陷阱与缺陷
文章平均质量分 57
dujunqiu
单片机,linux的嵌入式开发,会用一点python脚本来进行开发辅助工作
展开
-
error: #29: expected an expression
1:查看 #define XXX 是否有 “;1:如果是#if,要判断 真或假;那么define应该定义为;注意查看使用的未知是 #if 还是 #ifdef。2:如果是#ifdef,那么define应该定义为。2:keil需要设置 “C99 Mode”注意区别 #if 和 #ifdef 的用法。3:发现还有一种可能性。其它博主有说两种方式。原创 2024-07-12 15:48:23 · 418 阅读 · 0 评论 -
C陷阱和缺陷--第六章 “预处理器”
在严格意义上的编译过程开始之前,C语言预处理器首先对程序代码作了必要的转换处理;虽然宏(#define)非常有用,但如果没有认识到 **宏只是对程序的文本起作用**,那么很容易对宏的作用感到迷惑;6.1 不能忽视宏定义中的空格;6.2 宏并不是函数;6.3 宏并不是语句;6.4 宏并不是类型定义原创 2024-02-25 21:28:47 · 396 阅读 · 0 评论 -
C陷阱和缺陷--第七章 “可移植性缺陷”
C语言在许多不同的系统平台上都有实现;因此我们应该能够预料到,机器不同则其上的C语言实现也有细微差别;7.1 应对C语言标准变更;7.2 标识符名称的限制;7.3 整数的大小;7.4 字符是有符号整数还是无符号整数;7.5 移位运算符;7.6 内存位置0;7.7 除法运算时发生的截断;7.8 随机数的大小;7.9 大小写转换;7.10 首先释放,然后重新分配;null指针并不指向任何对象。因此,除非是用于赋值或比较运算,出于其它任何目的使用null指针都是非法的;在所有的C程序中,误用 null 指针的效原创 2024-02-25 21:27:11 · 832 阅读 · 0 评论 -
C陷阱和缺陷--第五章 “库函数”
返回整数的getchar函数;更新顺序文件;缓冲输出与内存分配;使用errno检测错误;库函数 signal有关库函数的使用,我们能给出的最好建议是尽量使用系统头文件。signal 库函数,作为捕获异步事件的一种方式;signal(signal type, handler function);signal: 标识函数将要捕获的信号类型;function: 当指定事件发生时,将要加以调用的事件处理函数;原创 2024-02-24 15:19:47 · 406 阅读 · 0 评论 -
C陷阱和缺陷--第四章 “连接”
什么事连接器;声明与定义;命名冲突与static修饰符;形参,实参与返回值;检查外部类型;头文件;’一个C程序可能是由多个分别编译的部分组成,这些不同部分通过一个连接器的程序,合并int a;如果 “int a;” 的位置出现在所有的函数体之外,那么它就被称为 外部对象a的定义;注: extern 是声明语句// 变量b的定义int a = 0;// 变量a的声明a=b;原创 2024-02-24 14:23:54 · 308 阅读 · 0 评论 -
C陷阱和缺陷--第三章 “语义陷阱”
指针与数组;非数组的指针;作为参数的数组声明;避免举隅法,空指针并非空字符串;边界计算与不对称边界;求值顺序;运算符&& || !;整数溢出;为main函数提供返回值1:数组的大小必须在编译期就作为一个常数确定下来,不能动态分配数组;2:对于数组,我们只能够做两件事:确定该数组的大小,以及获得指向该数组下标为0的元素的指针;3:任何一个数组下标运算,都等同于一个对应的指针运算;4:如果 array_test 不是用于sizeof的操作数,那么 array_test 总是被转换成一个指向 array_t原创 2024-02-23 22:29:34 · 531 阅读 · 0 评论 -
C陷阱和缺陷--第二章 “语法陷阱”
因为 fp 是一个函数指针,那么*fp就是该指针所指向的函数,所以 (*fp)() 就是调用该函数的方式;= EOF) 等价于 if (c = (getc(in)!= 0) 和 if (flag & (number!计算C语言运算符优先级的时候,不仅要考虑 优先级的先后顺序,还要考虑 结合性(自左向右,自右向左);*p++ 会被编译器解释为 *(p++), 而不是 (*p)++typedef void(*fp)(void *) 函数释义。由上至下,优先级依次递减。原创 2024-02-21 22:40:40 · 776 阅读 · 0 评论 -
C陷阱和缺陷--第一章 “词法陷阱”
词法分析器:编译器中负责将程序分解未一个一个符号的部分例程/*下面两个程序是等价的*/// 例1big = x;// 例2。**不要将比较运算符和赋值运算符混淆**if (x = y) 先将y值赋给x, 然后判断的是x的值, 只要x不为0,则永远为真;if (x == y) 判断的是x和y是否相等;如果一个整形常量的第一个字符是数字0,那么该常量将被视作8进制数;所以不要以为数字对齐,随意在前面补 0;用单引号引起的一个字符,实际上代表一个整数;用双引号引起的字符串,代表的是一个 指向无名数组原创 2024-02-21 00:05:18 · 438 阅读 · 0 评论