blogernice

导航

2018年10月30日 #

inline关键字

摘要: 本文介绍了GCC和C99标准中inline使用上的不同之处。inline属性在使用的时候,要注意以下两点: inline关键字在GCC参考文档中仅有对其使用在函数定义(Definition)上的描述,而没有提到其是否能用于函数声明(Declare)。 从 inline的作用来看,其放置于函数声明中应 阅读全文

posted @ 2018-10-30 17:57 blogernice 阅读(151) 评论(0) 推荐(0) 编辑

字符串处理函数

摘要: 函数名: strcpy 功 能: 拷贝一个字符串到另一个 用 法: char *stpcpy(char *destin, char *source); 程序例: #include <stdio.h> #include <string.h> int main(void) { char string[1 阅读全文

posted @ 2018-10-30 17:56 blogernice 阅读(127) 评论(0) 推荐(0) 编辑

string.h函数源码

摘要: strstr()函数源码 /* 得到s1中第一次包含s2字符串的位置指针。 */ #include <stdlib.h> char * my_strstr(const char *s1,const char *s2) { if (*s1 == 0) { if (*s2) return (char * 阅读全文

posted @ 2018-10-30 17:55 blogernice 阅读(413) 评论(0) 推荐(0) 编辑

ASCII码表

摘要: ASCII码表 ASCII码大致可以分作三部分組成。 第一部分是:ASCII非打印控制字符; 第二部分是:ASCII打印字符; 第三部分是:扩展ASCII打印字符。 第一部分:ASCII非打印控制字符表 ASCII表上的数字0–31分配给了控制字符,用于控制像打印机等一些外围设备。例如,12代表换页 阅读全文

posted @ 2018-10-30 17:55 blogernice 阅读(147) 评论(0) 推荐(0) 编辑

math.h()函数源码

摘要: hypot()函数源码 /* hypot函数对于给定的直角三角形的两个直角边, 求其斜边的长度。 */ //一般的常规算法: double my_hypot01(double x, double y) { double hypotenuse; x = fabs(x); y = fabs(y); if 阅读全文

posted @ 2018-10-30 17:54 blogernice 阅读(823) 评论(0) 推荐(0) 编辑

极品的C语言错误

摘要: 今天在测试硬件通信模块时候发现一个奇怪的问题,发送数据和接收数据进行比较复制时候频繁数据错误。 测试流程如下:发送一个字节和接收一个字节,进行比较,当返回数据和发送数据不相等的时候,错误计数器累加。 数据收发抽象如下: uint16 i = 0; uint16 j = 0; uint32 error 阅读全文

posted @ 2018-10-30 17:53 blogernice 阅读(130) 评论(0) 推荐(0) 编辑

ctype.h函数源码

摘要: iscsym()函数源码 int my_iscsym(int c) { return (isalnum(c) || ( c == '_' )); }//判断字符c是否为英文字母、数字和下划线 int main() { char ch = 'a'; if(my_iscsym(ch)) printf(" 阅读全文

posted @ 2018-10-30 17:53 blogernice 阅读(272) 评论(0) 推荐(0) 编辑

GCC编译-Werror

摘要: 编译: 第一步、是进行预编译,使用-E参数可以让GCC在预处理结束后停止编译过程: gcc -E hello.c -o hello.i 预处理的宏定义插入到hello.i中 第二步、是将hello.i编译为目标代码,这可以通过使用-c参数来完成: gcc -c hello.i -o hello.o 阅读全文

posted @ 2018-10-30 17:52 blogernice 阅读(9247) 评论(0) 推荐(0) 编辑

TODO FIXME的含义

摘要: TODO: + 说明:如果代码中有该标识,说明在标识处有功能代码待编写,待实现的功能在说明中会简略说明。FIXME: + 说明:如果代码中有该标识,说明标识处代码需要修正,甚至代码是错误的,不能工作,需要修复,如何修正会在说明中简略说明。XXX: + 说明:如果代码中有该标识,说明标识处代码虽然实现 阅读全文

posted @ 2018-10-30 17:52 blogernice 阅读(202) 评论(0) 推荐(0) 编辑

函数返回值—返回局部变量

摘要: 看看下面的程序的输出: #include <stdio.h> char *returnStr() { char *p="hello world!"; return p; } int main() { char *str; str=returnStr(); printf("%s\n", str); r 阅读全文

posted @ 2018-10-30 17:51 blogernice 阅读(169) 评论(0) 推荐(0) 编辑

__DATE__,__FILE__,__LINE__,__TIME__,__FUNCTION__

摘要: C99 ( ISO/IEC 9899:1999 ) 网上有pdf文件。 C标准中指定了一些预定义的宏,对于编程经常会用到。下面这个表中就是一些常常用到的预定义宏。 __DATE__ 进行预处理的日期(“Mmm dd yyyy”形式的字符串文字) __FILE__ 代表当前源代码文件名的字符串文字 _ 阅读全文

posted @ 2018-10-30 17:50 blogernice 阅读(102) 评论(0) 推荐(0) 编辑

GNU C的__attribute__机制

摘要: GNU C的一大特色(却不被初学者所知)就是__attribute__机制。__attribute__可以设置函数属性(Function Attribute)、变量属性(Variable Attribute)和类型属性(Type Attribute)。__attribute__书写特征是:__att 阅读全文

posted @ 2018-10-30 17:49 blogernice 阅读(102) 评论(0) 推荐(0) 编辑

printf中#号的意思

摘要: #进行宏字符串连接,在宏中 把参数解释为字符串,不可以在语句中直接使用。 在宏定义中 printf("%s;/n", #S) 会被解释为 printf("%s;/n", "S") 例如下面的代码 code start #define TRACE(S) (printf("%s;/n", #S), S) 阅读全文

posted @ 2018-10-30 17:49 blogernice 阅读(2089) 评论(0) 推荐(0) 编辑

printf的实现原理

摘要: printf的声明 int _cdeclprintf(const char* format, …); _cdecl是C和C++程序的缺省调用方式_CDEDL调用约定: 1.参数从右到左依次入栈 2.调用者负责清理堆栈 3.参数的数量类型不会导致编译阶段的错误对于x86而言,栈向下生长,函数参数从右向 阅读全文

posted @ 2018-10-30 17:48 blogernice 阅读(385) 评论(0) 推荐(0) 编辑

内存溢出、内存泄露、内存越界、缓冲区溢出、栈溢出

摘要: 内存溢出就是你要求分配的内存超出了系统能给你的,系统不能满足 需求,于是产生溢出。 内存泄漏是指你向系统申请分配内存进行使用(new),可是使用完了以后却不归还(delete),结果你申请到的那块内存你自己也不能再访问(也许你把它的地址给弄丢了),而系统也不能再次将它分配给需要的程序。一个盘子用尽各 阅读全文

posted @ 2018-10-30 17:47 blogernice 阅读(1028) 评论(0) 推荐(0) 编辑

C语言的弱符号与强符号

摘要: c语言的强符号和弱符号是c初学者经常容易犯错的地方。而且很多时候,特别是多人配合开发的程序,它引起的问题往往非常行为怪异而且难以定位。 什么是强符号和弱符号? 在c语言中,函数和初始化的全局变量是强符号,未初始化的全局变量时弱符号。强符号和弱符号的定义是连接器用来处理多重定义符号的,它的规则是: 不 阅读全文

posted @ 2018-10-30 17:47 blogernice 阅读(416) 评论(0) 推荐(0) 编辑

大小端存储问题

摘要: 所谓的大端模式,是指数据的低位(就是权值较小的后面那几位)保存在内存的高地址中,而数据的高位,保存在内存的低地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放; 所谓的小端模式,是指数据的低位保存在内存的低地址中,而数 据的高位保存在内存的高地址中,这 阅读全文

posted @ 2018-10-30 17:46 blogernice 阅读(566) 评论(0) 推荐(0) 编辑

gcc编译选项

摘要: gcc提供了大量的警告选项,对代码中可能存在的问题提出警 告,通常可以使用-Wall来开启以下警告: -Waddress -Warray-bounds (only with -O2) -Wc++0x-compat -Wchar-subscripts -Wimplicit-int -Wimplicit 阅读全文

posted @ 2018-10-30 17:45 blogernice 阅读(218) 评论(0) 推荐(0) 编辑

利用backtrace和backtrace_symbols打印函数的调用关系

摘要: 源程序如下 #include <stdio.h>#include <string.h>#include <stdint.h>typedef uint32_t UINT32;void fun3(void){ void* array[10] = {0}; UINT32 size = 0; char ** 阅读全文

posted @ 2018-10-30 17:45 blogernice 阅读(652) 评论(0) 推荐(0) 编辑

字符数组赋值

摘要: main() { char s[30]; strcpy(s, "Good News!"); /*给数组赋字符串*/ . . . } 上面程序在编译时, 遇到char s[30]这条语句时, 编译程序会在内存的某处留 出连续30个字节的区域, 并将第一个字节的地址赋给s。当遇到strcpy( strc 阅读全文

posted @ 2018-10-30 17:44 blogernice 阅读(309) 评论(0) 推荐(0) 编辑