C语言
autowanglei
这个作者很懒,什么都没留下…
展开
-
原子操作
《UNIX》环境高级编程 P59原创 2013-10-31 17:34:25 · 418 阅读 · 0 评论 -
linux c 定时器
#include #include #include #include #include static int count = 0; static struct itimerval oldtv; void set_timer() { struct itimerval itv; itv.it_int转载 2013-10-31 15:11:54 · 607 阅读 · 0 评论 -
C迷途指针
在计算机编程领域中,迷途指针,或称悬空指针、野指针,指的是不指向任何合法的对象的指针。当所指向的对象被释放或者收回,但是对该指针没有作任何的修改,以至于该指针仍旧指向已经回收的内存地址,此情况下该指针便称迷途指针。若操作系统将这部分已经释放的内存重新分配给另外一个进程,而原来的程序重新引用现在的迷途指针,则将产生无法预料的后果。因为此时迷途指针所指向的内存现在包含的已经完全是不同的数据。通转载 2014-09-24 17:43:17 · 408 阅读 · 0 评论 -
C语言指针安全及指针使用问题
指针是C语言的灵魂,同时也是最让初学者头痛的一个知识点,本文主要分项了C语言指针安全及指针使用问题。指针的声明与初始化1、不恰当的指针声明考虑如下的声明:int* ptr1, ptr2; // ptr1为指针,ptr2为整数正确的写法如下:int* ptr1, *ptr2;用类型定义代替宏定义是一个好的习惯,类型定义允许编译器检查作用转载 2014-09-24 17:43:34 · 582 阅读 · 0 评论 -
宏定义和枚举类型的区别
摘要:在C语言的编程中,我们常常需要定义一些常量,此时是采用宏定义还是采用枚举类型呢?它们有哪些区别?本文主要探讨这个问题。一、作用域对比1.1宏定义的默认作用域为整个文件,如果定义了宏定义结尾的地方,作用域就到那个地方;这里有一个潜在的危险,如果我们的头文件中包含了宏定义,此时会导致宏定义没有按照程序员的意愿而产生了范围扩展,当在另外的文件中有了相同的宏定转载 2014-11-07 13:47:11 · 3802 阅读 · 0 评论 -
Makefile显示编译时间
TIME = $(shell date)all:@echo "$(TIME)"原创 2014-10-29 15:29:51 · 5391 阅读 · 0 评论 -
近100个C语言基础算法案例(初级篇)
下面这些C语言基础算法案例都是经过测试和验证过了的,欢迎各位使用。本文是该系列的第一篇,都是一些相对初级的算法,很适合刚开始学C语言的同学。1、C语言打印一条语句源代码:/* C Program to print a sentence. */#include int main(){ printf("C Programming"); /* printf() p转载 2014-11-21 10:06:51 · 1953 阅读 · 0 评论 -
Makefile 向源码传宏定义
Makefile中加入DEBUD_PRT_WL=trueifeq ($(DEBUD_PRT_WL), true)CFLAGS += -DDEBUD_PRT_WL就相当于在源码中定义了 DEBUD_PRT_WL#define DEBUD_PRT_WL-D和DEBUD_PRT_WL之间没有空格。原创 2015-01-26 15:41:23 · 1127 阅读 · 0 评论 -
Makefile 学习记录
1、跟我一起写makefile2、makefile优化3、makefile例子4、C++封装成C Makefile5、makefile ifeq 表示“或”6、Makefile显示编译时间原创 2015-01-26 15:30:38 · 565 阅读 · 0 评论 -
让 C 程序更高效的 10 个建议
代码之美,不仅在于为一个给定问题找到解决方案,而且还在代码的简单性、有效性、紧凑性和效率(内存)。代码设计比实际执行更难 。因此,每一个程序员当用C语言编程时,都应该记着这些东西。本文向你介绍规范你的C代码的10种方法。0. 避免不必要的函数调用考虑下面的2个函数:123456789转载 2014-12-26 17:37:00 · 410 阅读 · 0 评论 -
编写高效的C程序与C代码优化
虽然对于优化C代码有很多有效的指导方针,但是对于彻底地了解编译器和你工作的机器依然无法取代,通常,加快程序的速度也会加大代码量。这些增加的代码也会影响一个程序的复杂度和可读性,这是不可接受的,比如你在一些小型的设备上编程,例如:移动设备、PDA……,这些有着严格的内存限制,于是,在优化的座右铭是:写代码在内存和速度都应该优化。整型数 / Integers在我们知道使用的数不可能是负转载 2014-12-30 11:58:54 · 428 阅读 · 0 评论 -
位运算实现加减乘除、求补、比较、正负判断
位运算实现加减乘除、求补、比较、正负判断 2011-11-24 13:52:43| 分类: 数据结构|举报|字号 订阅位运算的思想可以应用到很多地方,这里简单的总结一下用位运算来实现整数的四则运算。1.整数的加法view plainint MyAdd(int a,int b) { f转载 2014-05-14 17:13:44 · 2348 阅读 · 0 评论 -
更深入一点理解 switch 语句 及 c/c++ 对 const 的处理
前段时间在论坛上看见台湾李维在>一书中对windows编程模式中,消息处理部分有如下的一些分析:他说,在消息处理循环中,一般的形式是这样的MSG msg ;switch( msg ){ case WM_XXXXXXX : .... case WM_XXXXXXX : ....转载 2014-05-16 18:45:35 · 583 阅读 · 0 评论 -
#ifdef 如何实现“与或”
原本用宏定义包起来的代码类似如下:#ifdef A //... #endif // A 现在要加入一个宏定义 B,实现类似这样的条件判断(显然实际上这样是不行的):#ifdef A && ifdef B 其实应该这样:#if (defined转载 2014-03-10 17:51:07 · 807 阅读 · 0 评论 -
static作用
C程序一直由下列部分组成: 1)正文段——CPU执行的机器指令部分;一个程序只有一个副本;只读,防止程序由于意外事故而修改自身指令; 2)初始化数据段(数据段)——在程序中所有赋了初值的全局变量,存放在这里。 3)非初始化数据段(bss段)——在程序中没有初始化的全局变量;内核将此段初始化为0。 4)栈——增长方向:自顶向下增长;自动变量以转载 2013-11-18 11:50:12 · 508 阅读 · 0 评论 -
互斥锁
1、pthread_mutex_init():互斥锁初始化2、pthread_mutex_lock():互斥锁上锁3、pthread_mutex_trylock():互斥锁判断上锁4、pthread_mutex_unlock():互斥锁解锁5、pthread_mutex_destory():消除互斥锁原创 2013-10-31 18:34:50 · 752 阅读 · 0 评论 -
消息队列
3种IPC机制:信号量、共享内存、消息队列。信号量:用于管理队资源的访问;共享内存:用于程序之间高效的共享数据;消息队列:在进程之间传递数据的一种简单方法。前两种已经做过介绍,这里介绍一下消息队列。1. intmsgget(key_t key, int msgflg); //创建消息队列参数: key:消息队列关联的键。 msgflg:消息队列的建立标志和原创 2013-08-30 11:40:53 · 606 阅读 · 0 评论 -
poll() 和select()使用总结
select函数在前面转载的文章中介绍过,不在赘述,下面说一下poll()函数poll:poll函数和select函数功能十分相似,函数声明:int poll(struct pollfd fds[],nfds_t nfds, int timeout); 参数说明:fds:是一个struct pollfd结构类型的数组,用于存放需要检测其状态的Socket描述符;每当调用原创 2013-08-29 16:52:54 · 1479 阅读 · 0 评论 -
C结构体初始化
结构体初始化:对结构体struct a {int b;int c;}有几种初始化方式:struct a a1 = { .b = 1, .c = 2};或者struct a a1 = { b:1, c:2}或者struct a a1 = { 1, 2};内核喜欢用第一种,使用第一种和第二种时,原创 2013-08-08 12:01:13 · 656 阅读 · 0 评论 -
select函数使用总结
开发过程中用到了select函数监听多个描述符状态的变化,转载过一篇《select函数详解及应用》的文章,在使用过程中遇到过一此这篇文章中没有提到的问题,现做一下总结。 函数原型为:int select(intmaxfdpl, fd_set * readfds, fd_set *writefds, fd_set * read exceptfds, stru原创 2013-08-19 10:50:48 · 690 阅读 · 0 评论 -
select函数详解及应用
Select在Socket编程中还是比较重要的,可是对于初学Socket的人来说都不太爱用Select写程序,他们只是习惯写诸如connect、 accept、recv或recvfrom这样的阻塞程序(所谓阻塞方式block,顾名思义,就是进程或是线程执行到这些函数时必须等待某个事件的发生,如果事件没有发生,进程或线程就被阻塞,函数不能立即返回)。可是使用Select就可以完成非阻塞(所谓非阻塞方转载 2013-08-05 16:01:13 · 515 阅读 · 0 评论 -
探讨C语言中位字段的内存分配
C语言的位字段是个比较有意思的特性。它的目的是在一个机器字中保存多个对象(每个对象占据若干bit),从而节省内存资源,同时又避免复杂的位运算。在此不再讨论位字段的具体语法,下面将研究位字段的存储特性。 先说含有多个字段(field)的字(word)所占空间的规律——含有多个字段的字的大小是所有字段的类型中的最长的那个的倍数。但要确定究竟是最长类型的几倍则比较复杂,这要看是否需要考转载 2013-12-26 17:36:21 · 627 阅读 · 0 评论 -
信号量sem_t
释义 信号量的数据类型为结构sem_t,它本质上是一个长整型的数。函数sem_init()用来初始化一个信号量它的原型为: extern int sem_init __P ((sem_t *__sem, int __pshared, unsigned int __value));头文件为: #include sem为指向信号量结构的一个指针;转载 2014-02-08 10:21:59 · 1145 阅读 · 0 评论 -
获取文件大小(C语言)
方法一:利用纯C语言来获取文件大小unsigned long get_file_size(constchar *filename){ unsigned long size; FILE* fp = fopen( filename,"rb" ); if(fp==NULL){ printf("ERROR: Openfile %s failed.原创 2014-03-07 11:08:36 · 1443 阅读 · 0 评论 -
二维数组和二级指针
二维数组和二级指针 前两天写个程序,传参数的时候想传个二维数组进去,结果悲剧了,函数写成Fun (int **p){},原来没有这么写过,以为这么写也是对的,结果错了,查了些资料,做个总结。 Fun (int **p){}这里面的int **p //这里的p不是二维数组的指针,而是指向指针的指针,即二级指针。正确的二维数组的指针应转载 2015-01-26 10:50:35 · 447 阅读 · 0 评论