blogernice

导航

文章分类 -  c语言

DSB,ISB,DMB指令
摘要:4.11.9. DBG、DMB、DSB 和 ISB 调试指令、数据内存屏障指令、数据同步屏障指令和指令同步屏障指令。 语法 DBG{cond} {#option} DMB{cond} {option} DSB{cond} {option} ISB{cond} {option} 其中: cond 是一 阅读全文

posted @ 2020-10-28 10:40 blogernice

深入剖析变长参数函数的实现
摘要:什么是变长参数? 所谓含有变长参数的函数是指该函数可以接受可变数目的形参。例如我们都非常熟悉的 printf,scanf等等。 2:变长参数如何实现? 首先来看下面这样一个例子: #include<stdio.h>#include<stdarg.h>#include<string.h> void d 阅读全文

posted @ 2020-06-04 09:13 blogernice

Linux下实现多线程通信,环形缓冲区,可用于producer/consumer
摘要:操作系统:ubuntu10.04前言: 在嵌入式开发中,只要是带操作系统的,在其上开发产品应用,基本都需要用到多线程。 为了提高效率,尽可能的提高并发率。因此,线程之间的通信就是问题的核心。 根据当前产品需要,使用 环形缓冲区 解决。一,环形缓冲区的实现 1,cbuf.h 点击(此处)折叠或打开 # 阅读全文

posted @ 2020-06-04 09:02 blogernice

字符串处理函数
摘要:函数名: 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

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

posted @ 2018-10-30 17:55 blogernice

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

函数返回值—返回局部变量
摘要:看看下面的程序的输出: #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

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

posted @ 2018-10-30 17:50 blogernice

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

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

posted @ 2018-10-30 17:48 blogernice

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

posted @ 2018-10-30 17:47 blogernice

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

posted @ 2018-10-30 17:47 blogernice

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

posted @ 2018-10-30 17:46 blogernice

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

posted @ 2018-10-30 17:45 blogernice

文件读写
摘要:从文件编码的方式来看,文件可分为ASCII码文件和二进制码文件两种。 ASCII文件也称为文本文件,这种文件在磁盘中存放时每个字符对应一个字节,用于存放对应的ASCII码。ASCII码文件可在屏幕上按字符显示。 二进制文件是按二进制的编码方式来存放文件的。二进制文件虽然也可在屏幕上显示,但其内容无法 阅读全文

posted @ 2018-10-30 17:43 blogernice

scanf 用法及陷阱(转)
摘要:函数名: scanf 功 能: 执行格式化输入 用 法: int scanf(char *format[,argument,...]); scanf()函数是通用终端格式化输入函数,它从标准输入设备(键盘) 读取输入的信息。可以读入任何固有类型的数据并自动把数值变换成适当的机内格式。 其调用格式为: 阅读全文

posted @ 2018-10-30 17:38 blogernice

va_start、va_end、va_list的使用
摘要:1:当无法列出传递函数的所有实参的类型和数目时,可用省略号指定参数表void foo(...);void foo(parm_list,...); 2:函数参数的传递原理函数参数是以数据结构:栈的形式存取,从右至左入栈.eg:#include <iostream>void fun(int a, ... 阅读全文

posted @ 2018-10-30 17:37 blogernice

【转】getopt分析命令行参数
摘要:(一) 在Linux中,用命令行执行可执行文件时可能会涉及到给其加入不同的参数的问题,例如: ./a.out -a1234 -b432 -c -d 程序会根据读取的参数执行相应的操作,在C语言中,这个功能一般是靠getopt()这个函数,结合switch语句来完成的,首先来看下面的代码: #incl 阅读全文

posted @ 2018-10-30 17:31 blogernice