c
文章平均质量分 50
c 语言知识
leon.liao
这个作者很懒,什么都没留下…
展开
-
c语言缺陷 - 函数声明和定义,参数不一致校验缺失
背景使用C语言开发时常会遇到以下问题:多次修改导致代码文件(.c)中的函数定义的参数个数/类型与头文件中的函数声明不一致,编译器无法检测出来,即使是开启了严格的编译选项(-Wall -Werror),如下:* test.hint test(int a);* test.c#include <stdio.h>int test(int a, int b){ a = 1; b = 2; ....}* main.c#include <stdio.原创 2022-05-11 16:45:57 · 2401 阅读 · 0 评论 -
C - 关键字 - restrict
【代码】C - 关键字 - restrict。原创 2022-03-09 16:32:54 · 3456 阅读 · 0 评论 -
基础知识 - 语法标准(ANSI C、ISO C、GNU C)
由来早期,程序员使用汇编语言进行编程,汇编语言与机器平台紧密耦合,为了屏蔽不同平台的差异性,增加代码的可移植性,就需要对汇编语法进行一定抽象并且制定一些标准接口,不同平台按照标准实现相同接口,这就是C语言的产生。标准语法标准ANSI C二十世纪八十年代,为了避免各开发厂商用的C语言语法产生差异,由美国国家标准局为C语言制定了一套完整的国际标准语法,称为ANSI C,作为C语言最初的标准。ISO C与ANSI C标准同时出现的就是ISO组织,将ANSI C加入了ISO的大家庭,原创 2021-03-05 20:15:22 · 1359 阅读 · 2 评论 -
时间操作 - 时间格式转换
说明编程中,时间格式转换是常用的功能,特别是与格式化字符串之间的互相转换。时间转格式化字符串固定格式字符串 - asctime/asctime_r/ctime/ctime_r函数asctime/asctime_r函数支持将一个struct tm结构格式化为一个固定格式字符串;ctime/ctime_r函数支持将一个time_t变量转换为一个固定格式字符串。固定格式:Www Mmm dd hh:mm:ss yyyy,Www 表示星期几,Mmm 是以字母表示的月份,dd 表示一月中的第几天,原创 2021-01-12 20:35:31 · 1082 阅读 · 0 评论 -
C编译器 - 隐式函数声明
引子初学者使用C语言编程,有时会出现异常崩溃,如下:* test.c#include <stdio.h>int main(){ printf("%s\n", test()); return 0;}* xxx.cchar *test(){ return "hello world";}* 编译gcc test.c xxx.c -o test* 执行xxx:~/demo$ ./test段错误 (核心已转储)问题原因在C语言中,如果函数在调原创 2021-01-07 11:24:16 · 1455 阅读 · 0 评论 -
基础语法 - 位运算
位移内存中存储的数据按二进制位左右移动。右移 (二进制数据向右移动) 操作符:>>左移 (二进制数据向左移动) 操作符:<<使用示例int a = 1;int b = a << 1; //左移1位int c = a >> 2; //右移2位C语言处理标准左移:移位和右边补零右移:有两种处理方式无符号数采用逻辑右移:移位和左边补零有符号数采用算术右移:移位和左边补符号位(正数补0,负数补1)。示例:unsig原创 2020-12-26 18:09:46 · 272 阅读 · 0 评论 -
循环事件处理
说明近日阅读libb64源码,发现以下写法:* 文件:cencode.c 函数:base64_encode_block...switch (state_in->step){ while (1) {case step_A: ...;case step_B: ...;case step_C: ...; }}* 使用int main(){ ...; base64_encode_block(); base64_原创 2020-07-27 21:27:10 · 314 阅读 · 0 评论 -
基础语法 - extern关键词
说明extern的英文意思是“外部”。何为外部?C/C++程序编译时,编译器并不是将所有源码一起编译,而是以单个源码文件为单元逐一编译,编译单个源码文件时其它源码文件是不可见,其它源码定义的函数和全局变量也是不可见的,是正在编译源码的外部定义。链接时才将所源码中有定义和使用链接到一起。作用使用extern声明外部定义,以避免编译单个源码时找不到全局变量或函数的声明,误判为代码错误。特点由于链接时,才将定义和使用链接到一起,因此如果声明外部变量时变量名写错,编译时不会报错,而是在原创 2020-06-28 21:52:21 · 240 阅读 · 0 评论 -
基础语法 - static关键词
说明static的英文意思是:adj.静止的;静态的;停滞的在C语言中作用和其本意一样,如下:保证其生命周期和程序生命周期一致,不会被清除;实现原理:编译时更改其存储域。保证其作用域和可见性不扩散,限制其作用域和可见性;实现原理:编译器保证其作用域和可见性。在C语言中可用来修饰变量和函数。用法修饰变量全局变量在全局变量前加上关键字static,全局变量就被定...原创 2020-04-30 12:23:59 · 127 阅读 · 0 评论 -
基础语法 - const 关键词
说明const的英文意思是:adj.恒定的;不变的; 做形容词表示不变的n.常数;恒量;做名词表示常量以上很好的解释了const的作用,即限制编程中的可变元素变量不能被修改,可以理解为只读。实现只读的方式:编译器检查。改变变量存储区域,将变量放到只读变量区。特征不可以修改。value = 20; //编译错误,不可被修改定义时没有默认值,必须手动定义...原创 2020-04-29 12:38:43 · 417 阅读 · 0 评论 -
标准库 - system
说明功 能: 在window下执行一条DOS命令或者在linux下执行一条shell命令。函数声明int system(char *command);例子:#include <stdlib.h>#include <stdio.h>int main(void){ printf("About to spawn command.com and run...原创 2020-04-28 21:36:27 · 596 阅读 · 0 评论 -
基础 - 结构体 - 结构体中的柔性数组
说明在日常的编程中,有时候需要在结构体中存放一个长度不固定的字符串,一般的做法,是在结构体中定义一个指针成员,这个指针成员指向该字符串所在的动态内存空间,例如:typedef struct test{ int a; double b; char *p;};p指向字符串数据,这种方法有以下的缺陷:造成字符串与结构体内存是分离的,有时候不利于操作,例如:复...原创 2020-04-24 20:57:21 · 933 阅读 · 0 评论 -
基础 - 数组
说明在C程序中,二维数组底层数据实际上是一维的,因为内存就是线性的。易错点书写和访问容易弄混,例如:二维数组a[2][3],以下写法都正确吗?int a1[2][3] = { {1, 2}, {3, 4}, {5, 6}};int a2[2][3] ={ {1, 2, 3}, {4, 5, 6}};以上写法,编译器都不会报错,...原创 2020-04-24 20:28:39 · 358 阅读 · 0 评论 -
异常处理 - 断言
说明断言是定义于assert.h中一个宏,其作用是如果它的条件返回错误,则终止程序执行,能够在Debug阶段帮助程序员验证值是否符合预期。定义定义如下。#include "assert.h" void assert(int expression);原理:先计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息,然后再调用abort...原创 2020-04-03 15:51:17 · 949 阅读 · 0 评论