摘要:— Built-in Function: int __builtin_ffs (unsigned int x)Returns one plus the index of the least significant 1-bit of x, or if x is zero, returns zero.返回右起第一个‘1’的位置。— Built-in Function: int __builtin_clz (unsigned int x)Returns the number of leading 0-bits in x, starting at the most significant bit po
阅读全文
随笔分类 - C语言程序设计
摘要:typedef是用来声明自定义数据类型,配合各种原有数据类型来达到简化编程的目的的类型定义关键字.用typedef定义类型的方法① 先按定义变量的方法写出定义体(如:int i)。② 将变量名换成新类型名(例如:将i换成COUNT)。③ 在最前面加typedef.(例如:typedef int COUNT)。④ 然后可以用新类型名去定义变量。说明:(1)用typedef可以声明各种类型名,但不能用来定义变量。(2) 用typedef只是对已经存在的类型增加一个类型名,而没有创造新的类型。 (3) 当不同源文件中用到同一类型数据时,常用typedef声明一些数据类型,把它们单独放在一个文件中,然
阅读全文
摘要:一.size_t strlen ( const char * str );Get string lengthReturns the length of str.The length of a C string is determined by the terminating null-character: A C string is as long as the amount of characters between the beginning of the string and the terminating null character.This should not be confus
阅读全文
摘要:最近在看林锐博士的高质量c/c++编程指南,在书的后面附了一张测试的卷子,做了一下,发现自己很多都是处于半懂半不懂得阶段,比如下面这道关于sizeof的题目:1、void Func ( char str[100]) { 请计算 sizeof( str ) = 4 (2 分) } 2、char str[100 ] = {0} ; char *p = str ; int n = 10; 请计算 sizeof (str ) = 100 (2 分) sizeof ( p ) = 4 (2 分) sizeof ( n ) = 4 (2 分) 3、void *p = malloc( 100 ); 请计算.
阅读全文
摘要:C语言中如何使用宏C(和C++)中的宏(Macro)属于编译器预处理的范畴,属于编译期概念(而非运行期概念)。下面对常遇到的宏的使用问题做了简单总结。 关于#和##在C语言的宏中,#的功能是将其后面的宏参数进行字符串化操作(Stringfication),简单说就是在对它所引用的宏变量 通过替换后在其左右各加上一个双引号。比如下面代码中的宏: #define WARN_IF(EXP) do{ if (EXP) fprintf(stderr, "Warning: " #EXP "/n"); } while(0)那么实际使用中会出现下面所示的替换过程: WA
阅读全文
摘要:atof(将字符串转换成浮点型数)相关函数 atoi,atol,strtod,strtol,strtoul表头文件 #include <stdlib.h>定义函数 double atof(const char *nptr);函数说明 atof()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时('')才结束转换,并将结果返回。参数nptr字符串可包含正负号、小数点或E(e)来表示指数部分,如123.456或123e-2。返回值 返回转换后的浮点型数。附加说明 atof()与使用strtod(nptr,(c
阅读全文
摘要:epoll使用 epoll的工作原理是,你如果想进行IO操作时,先向epoll查询是否可读或可写,如果处于可读或可写状态后,epoll会通过epoll_wait函数通知你,此时你再进行进一步的recv或send操作。 epoll仅仅是一个异步事件的通知机制,其本身并不作任何的IO读写操作,它只负责告诉你是不是可以读或可以写了,而具体的读写操作,还要应用层自己来作。epoll仅提供这种机制也是非常好的,它保持了事件通知与IO操作之间彼此的独立性,使得epoll的使用更加灵活。epoll用到的所有函数都是在头文件sys/epoll.h中声明的,下面简要说明所用到的数据结构和函数:所用到的数据结构t
阅读全文
摘要:access(判断是否具有存取文件的权限)相关函数stat,open,chmod,chown,setuid,setgid表头文件#include<unistd.h>定义函数int access(const char * pathname,int mode);函数说明access()会检查是否可以读/写某一已存在的文件。参数mode有几种情况组合, R_OK,W_OK,X_OK 和F_OK。R_OK,W_OK与X_OK用来检查文件是否具有读取、写入和执行的权限。F_OK则是用来判断该文件是否存在。由于access()只作权限的核查,并不理会文件形态或文件内容,因此,如果一目录表示为“
阅读全文
摘要:指针ptr指向结构体type中的成员member;通过指针ptr,返回结构体type的起始地址 type |----------| | | | | |----------|ptr-->| member --| |----------| | | | | |----------|/*** container_of - cast a member of a structure out to the containing structure* @ptr: the pointer to the member.* @type: the type of the container struct thi
阅读全文
摘要:在Linux下opendir()、readdir()和closedir()这三个函数主要用来遍历目录。在使用这三个函数前必须先包括以下两个头文件:#include <sys/types.h>#include <dirent.h>opendir函数的原型为:DIR *opendir(const char *name);它返回一个DIR*类型,这就是一个句柄啦,你不用管它的内部结构是什么样的,只要知道这个句柄就是等一下要传给readdir()函数的参数就行了。readdir函数的原型为:struct dirent *readdir(DIR *dir);看它的参数就知道该参数
阅读全文
摘要:在 2.6 内核中,随处可以见到 likely() 和 unlikely() 的身影,那么为什么要用它们?它们之间有什么区别? 首先要明确: if(likely(value)) 等价于 if(value) if(unlikely(value)) 也等价于 if(value)也就是说 likely() 和 unlikely() 从阅读和理解代码的角度来看,是一样的!!!这两个宏在内核中定义如下:#define likely(x) __builtin_expect((x),1)#define unlikely(x) __builtin_expect((x),0)__builtin_expect()
阅读全文
摘要:1. 联合说明和联合变量定义 联合也是一种新的数据类型, 它是一种特殊形式的变量。 联合说明和联合变量定义与结构十分相似。其形式为: union 联合名{ 数据类型 成员名; 数据类型 成员名; ... } 联合变量名; 联合表示几个变量公用一个内存位置, 在不同的时间保存不同的数据类型 和不同长度的变量。 下例表示说明一个联合a_bc: union a_bc{ int i; char mm; }; 再用已说明的联合可定义联合变量。 例如用上面说明的联合定义一个名为lgc的联合变量, 可写成: union a_bc lgc; 在联合变量lgc中, 整型量i和字...
阅读全文
摘要:/*********以下是转载《16道嵌入式C语言面试题中的一题》***********/关键字volatile有什么含意 并给出三个不同的例子。一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。下面是volatile变量的几个例子:1). 并行设备的硬件寄存器(如:状态寄存器)2). 一个中断服务子程序中会访问到的非自动变量(Non-automatic variables)3). 多线程应用中被几个任务共享的变量回答不出这个问题..
阅读全文
摘要:原型:extern int tolower(int c); 用法:#include <ctype.h> 功能:将字符c转换为小写英文字母 说明:如果c为大写英文字母,则返回对应的小写字母;否则返回原来的值。 举例: // tolower.c #include <syslib.h> #include <ctype.h> main() { char *s="Hello, World!"; int i; clrscr(); // clear screen printf("%s/n",s); for(i=0;i<strl
阅读全文
摘要:原型:extern int isspace(int c); 用法:#include <ctype.h> 功能:判断字符c是否为空白符 说明:当c为空白符时,返回非零值,否则返回零。 空白符指空格、水平制表、垂直制表、换页、回车和换行符。 举例: // isspace.c #include <syslib.h> #include <ctype.h> main() { char s[]="Test Line 1/tend/nTest Line 2/r"; int i; clrscr(); // clear screen for(i=0;i&l
阅读全文
摘要:原型:extern char *strstr(char *haystack, char *needle); 用法:#include <string.h> 功能:从字符串haystack中寻找needle第一次出现的位置(不比较结束符NULL)。 说明:返回指向第一次出现needle位置的指针,如果没找到则返回NULL。 举例: // strstr.c#include <syslib.h> #include <string.h> main() { char *s="Golden Global View"; char *l="lob
阅读全文
摘要:三个函数的声明分别是:void* realloc(void* ptr, unsigned newsize);void* malloc(unsigned size);void* calloc(size_t nelem, size_t elsize);都在stdlib.h函数库内它们的返回值都是请求系统分配的地址,如果请求失败就返回NULLmalloc用于申请一段新的地址,参数size为需要内存空间的长度,如:char* p;p=(char*)malloc(20);calloc与malloc相似,参数elsize 为申请地址的单位元素长度,nelem为元素个数,如:char* p;p=(char*
阅读全文
摘要:memcpy() -- 拷贝内存内容2007年07月06日 星期五 09:07相关函数: bcopy(), memccpy(), memmove(), strcpy(), strncpy()表头文件: #include <string.h>定义函数: void *memcpy(void *dest, const void *src, size_t n)函数说明: memcpy()用来拷贝src所指的内存内容前n个字节到dest所指的内存地址上。与strcpy()不同的是,memcpy()会完整的复制n个字节,不会因为遇到字符串结束'/0'而结束返回值: 返回指向de
阅读全文
摘要:int snprintf(char *restrict buf, size_t n, const char * restrict format, ...);函数说明:最多从源串中拷贝n-1个字符到目标串中,然后再在后面加一个0。所以如果目标串的大小为n 的话,将不会溢出。函数返回值:若成功则返回欲写入的字符串长度,若出错则返回负值。Result1(推荐的用法)#include <stdio.h>#include <stdlib.h>int main(){ char str[10]={0,}; snprintf(str, sizeof(str), "012345
阅读全文