c language
daydayup
this is a good boy
展开
-
C函数指针学习
#include typedef int (*pFun)(int a,int b);int add(int a,int b){ return a+b;}int cout(pFun p,int a,int b,int c){ return (*p)(a,b)+c;}int sub(int ma,int mi){ return ma-mi;}int原创 2015-04-24 10:10:02 · 341 阅读 · 0 评论 -
pjsip项目概要及c语言面向对象方法实现
最近在学习SIP,刚刚看了一个很好的开源工程 pjsip 很强大! 可是对 SIP 还不是很了解,特增加了一个学习计划:SIP学习 RFC 文档参见:http://www.ietf.org/rfc/rfc3261.txtSIP 也是类似 HTTP 的一个协议集合,在网上搜索了一下相关的信息,摘录如下: SIP消息的第一行包含消息的类型和所使用的SIP版本(转载 2015-10-30 10:23:01 · 4900 阅读 · 1 评论 -
C语言中函数参数入栈的顺序
先通过一个小程序来看一看:#include void foo(int x, int y, int z) { printf("x = %d at [%X]n", x, &x); printf("y = %d at [%X]n", y, &y); printf("z = %d at [%X]n", z, &z); } int main(int argc, char *a转载 2015-10-13 11:57:40 · 479 阅读 · 0 评论 -
gcc中动态库和静态库的链接顺序
so文件:动态库a文件: 静态库exe文件:可执行程序(linux下以文件属性来标示是否是可执行文件,与后缀名无关)经过自己写的一些测试程序,大致了解了下gcc中链接顺序问题,总结出以下几点:1,动态库中可以包含另一个静态库,通过参数 -lxxx 把静态库libxxx.a加入so文件中,这样so文件中 就包含了libxxx.a的所有实现。当然,如果不包含libxxx.a转载 2015-09-19 10:50:25 · 4582 阅读 · 1 评论 -
代码中特殊的注释技术——TODO、FIXME和XXX的用处
本文内容概要: 代码中特殊的注释技术——TODO、FIXME和XXX的用处。 前言:今天在阅读Qt Creator的源代码时,发现一些注释中有FIXME英文单词,用英文词典居然查不到其意义!实际上,在阅读一些开源代码时,我们常会碰到诸如:TODO、FIXME和XXX的单词,它们是有其特殊含义的。、TODO: + 说明:如果代码中有该标识,说明在标识处有功能代码待编写,转载 2015-09-16 22:17:56 · 293 阅读 · 0 评论 -
深析静态链接库和动态链接库相同函数覆盖及库调用顺序问题
注意:编译器为gcc,若使用g++,请在库里面加上extern “C” 两个静态库 首先测试静态链接库,大概的代码如下: liba.c#include stdio.h>#include stdlib.h>#include "libA.h" void libA(){ common();}转载 2015-08-19 14:12:29 · 637 阅读 · 0 评论 -
C语言将一个字节逆序
原来一个字节0x36,二进制数据为:0011 0110,现要将其转换为0110 1100,代码如下:#include int main(void){ unsigned char src = 0x36; unsigned char des = 0; unsigned char tmp = 0; int i=0; for(;i<8;i++) { if(src & 0x1)原创 2015-08-11 20:43:41 · 4480 阅读 · 0 评论 -
c、c++引用
C的引用:#include void ex(int* x,int* y){ int* ptr=x; x=y; y=ptr; printf("*x=%d,*y=%d\n",*x,*y);}int main(void){ int x=5; int y=10; ex(&x,原创 2015-08-08 14:13:38 · 311 阅读 · 0 评论 -
linux errno是什么?
1.为防止和正常的返回值混淆,系统调用并不直接返回错误码,而是将错误码放入一个名为errno的全局变量中。如果一个系统调用失败,你可以读出errno的值来确定问题所在。errno不同数值所代表的错误消息定义在errno.h中,你也可以通过命令"man 3 errno"来察看它们。需要注意的是,errno的值只在函数发生错误时设置,如果函数不发生错误,errno的值就无定义,并不会被置为0。转载 2015-07-03 19:35:56 · 1562 阅读 · 0 评论 -
C语言中有没有bool类型?
首先请大家回想一下,在你们所编写的C程序中,是否使用过bool(布尔)类型?bool类型一般用来表示真假,是程序设计中一个很基本的数据类型。但是,C语言里面并不直接支持bool类型。一些初学C语言,或者是对C语言不是很精通的朋友肯定觉得很奇怪,为什么在C++,JAVA等语言里使用的bool类型,在C语言里无法使用了呢?问题解析bool类型的变量,为0时表示为假,为非0时表示为真。但是原始C转载 2015-07-01 18:12:29 · 9891 阅读 · 0 评论 -
C++实现圆角矩形
大家先看一个原理图(假设区域2,3,4,5的高度都为1像素): 由图,非圆角矩形是整个虚线围成的矩形区域(rcClient),而所要的圆角矩形是最外围实线形成的区域(rgnWindow)。 现在我们把整个圆角矩形进行分解:1. rcClient上下各偏移2像素的矩形区域 Rect(rcClient.left, rcClient.top + 2, rcClient.right, rcCl转载 2015-05-25 20:34:38 · 4048 阅读 · 0 评论 -
extern "C"的用法解析
1.引言 C++语言的创建初衷是“a better C”,但是这并不意味着C++中类似C语言的全局变量和函数所采用的编译和连接方式与C语言完全相同。作为一种欲与C兼容的语言,C++保留了一部分过程式语言的特点(被世人称为“不彻底地面向对象”),因而它可以定义不属于任何类的全局变量和函数。但是,C++毕竟是一种面向对象的程序设计语言,为了支持函数的重载,C++对全局函数的处理方式与C有转载 2015-07-01 09:35:38 · 289 阅读 · 0 评论 -
linux中memset的正确用法
【起因】希望对各种类型的数组进行初始化,避免野值 【函数头文件】 提示:在linux中可以在terminal中输入 "man memset"进行查询 #include void *memset(void *s, int c, size_t n); 【使用说明】 The memset() function fills转载 2015-06-29 14:19:44 · 8100 阅读 · 0 评论 -
C语言使用函数递归判断栈的生长方向
#include int findStackDirector(void){ static char* addr=NULL; char* ptr; if(addr==NULL) { addr=ptr; findStackDirector(); } else { if(a原创 2015-06-05 23:35:35 · 687 阅读 · 0 评论 -
C静态存储区栈堆的区别
一、内存基本构成 可编程内存在基本上分为这样的几大部分:静态存储区、堆区和栈区。他们的功能不同,对他们使用方式也就不同。 静态存储区:内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。它主要存放静态数据、全局数据和常量(包括字符串常量)。 栈区:在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束转载 2015-05-22 21:03:18 · 419 阅读 · 0 评论 -
gcc编译器选项
记录常用的GCC编译选项,遇到常用的再进行添加。1.-c:只编译,不链接。只进行预编译,编译,和汇编程序。2.-o:指定输出文件名称。3.-Dmacro,定义宏。作用类似于#define macro。还可以进行类似用法:-DMYMACRO="my macro",相当于#define MYMACRO “my macro”。4.-I(大写i)dir,指定头文件搜索路径,且该路径优先原创 2015-06-17 14:30:06 · 449 阅读 · 0 评论 -
C语言可变长参数函数与默认参数提升
1、概述C标准中有一个默认参数提升(default argument promotions)规则。默认参数提升有时会给我们带来疑惑。本文结合C语言的可变长参数函数来说明默认参数提升存在的陷阱。 2、默认参数提升的定义标准中的定义如下:If the expression that denotes the called function has a type转载 2015-04-25 09:20:44 · 535 阅读 · 0 评论 -
printf 打印颜色
控制字符的通用格式如下:Esc[{attr1};...;{attrn}m其中:Esc 是转义字符, 其值为"\033";[ 是常量的左中括号;{attr1};...{attrn} 是若干属性, 通常是由一个有特定意义的数字代替, 每个属性之间用分号分隔;m 就是字面常量字符m;属性列表如下:1. 通用格式控制:0 重置所有属性1 高亮/加粗2 暗转载 2016-01-05 11:39:58 · 673 阅读 · 0 评论