C语言
文章平均质量分 71
Justlinux2010
新浪微博 justlinux2010
展开
-
C语言传递数组到函数的一个发现
今天在调试程序的时候突然发现,将数组首地址和数组长度做为参数传递给函数时,将数组长度作为下标访问数组, 得到的是数组的长度。环境:操作系统: Centos 5.6编译工具:gcc 4.1.2代码如下:#include static void fun(int *arr, int len){ printf("%d\n", arr[len]);}int main(v原创 2012-02-04 12:56:04 · 1736 阅读 · 2 评论 -
gcc中的constructor属性和destructor属性
constructor属性可以使函数在main()函数之前执行,destructor属性会让函数在main()函数完成或调用exit()之后被执行。这些属性可以用来在程序运行之前初始化所需的数据,非常有用。而且这两个属性都还可以指定优先级,控制使用修饰的函数的执行顺序,优先级的值必须大于100,因为0到100之间的优先级由gcc来使用,优先级的值越小,优先级越高,会优先执行。另外还有一点需要注意,原创 2013-09-14 22:52:54 · 5126 阅读 · 0 评论 -
C语言中没有main函数生成可执行程序的几种方法
1、define预处理指令这种方式很简单,只是简单地将main字符串用宏来代替,或者使用##拼接字符串。示例程序如下:#include #define begin mainint begin(void){printf("Hello, World!\n");return 0;}#include #define beg原创 2013-09-12 23:51:53 · 7171 阅读 · 0 评论 -
类型转换导致的程序异常
通过下面的程序来介绍:#include int main(void){ int i; unsigned long long type = 0; unsigned long long a = 0; for(i=0;i<34;i++){ a = 1<<i; printf("a %llu, i = %d\n",a, i);原创 2013-07-25 18:07:28 · 1556 阅读 · 0 评论 -
发现一个gcc的“BUG”?
代码如下:#include struct list { struct t *next; int i;};int main(void){ struct list l; printf("len = %lu.n", sizeof(l)); return 0;}上面的list类型中next成员的类型是struct t,但是struct t是未原创 2013-01-16 10:35:51 · 1532 阅读 · 1 评论 -
定义宏时千万不要把宏的“参数名”和宏中用到的结构体成员名相同!
C语言中的宏非常强大,可以利用宏来一些要经常用到的操作封装在一起,或者有时仅仅只是让代码看起来更整洁些,但是宏是没有类型检查的,所以使用时千万要小心。但是有时也可以利用宏的没有类型检查这个特性,实现一些特殊的需求。举个简单的例子来说,下面的两个函数:int conf_add_fd(conf_snd_t *conf_snd, int fd) { fd_snd_t *fd_snd =原创 2012-08-17 15:17:56 · 3107 阅读 · 0 评论 -
Linux编程中的错误码列表
有时可以知道错误的数值,但是如果不知道对应于那个宏定义,也很难知道这个错误描述的是什么。我平时这两种方法来确定:在内核源码中搜索和查看头文件。 在内核源码中搜索一般都可以搜到,而且使用source insight的话也很方便,不多说了。当然更多的时候还是看头文件,因为一般的错误在/usr/include/asm-generic/errno-base.h和/usr/include/asm-gener原创 2012-07-28 12:13:26 · 1954 阅读 · 0 评论 -
C语言运算符优先级 详细列表
文章作者:Slyar 文章来源:Slyar Home (www.slyar.com) 转载请注明,谢谢合作。优先级运算符名称或含义使用形式结合方向说明1[]数组下标数组名[常量表达式]左到右 ()圆括号(转载 2012-07-26 10:10:44 · 1027 阅读 · 0 评论 -
Linux下获取本地IP地址--------ioctl
获取本地的局域网IP地址,个人认为最好的还是这个神器---ioctl,这个接口的功能真是非常强大,非常值得研究和学习。即使本地的主机名是localhost,使用ioctl也可以轻松地获取局域网中的IP地址,而且不需要在/etc/hosts中绑定局域网IP。使用ioctl来获取本地局域网IP地址,需要首先创建一个套接字和一个struct ifreq结构(值-结果参数),下面首先介绍struct if原创 2012-07-25 17:59:32 · 3787 阅读 · 2 评论 -
Linux下获取本地IP地址--------getaddrinfo
获取本地IP地址的方式很多,这里使用的接口是getaddrinfo(最开始发表时,这个地方表述有错误,这个接口也不能解决主机名为localhost,获取的IP地址是127.0.0.1,但是可以通过修改/etc/hosts文件来绑定本地IP地址)。这个接口在《Unix网络编程》第一卷的11.2节有讲解,但是当时看书的时候没有深入的研究这个接口(当时可能感觉获取本地ip地址很容易),这个接口及其相关的原创 2012-07-24 15:26:10 · 15903 阅读 · 3 评论 -
selec/poll中的读写事件和epoll中的读写事件
在Linux网络编程中,常常使用select和poll来做事件触发,监听socket的读写状态,然后进行读写操作。现在新的linux内核中,增加了epoll事件触发机制,具有更高的性能和更好的设计理念,可以用它来完全代替select和poll。相比于select,epoll最大的好处在于它不会随监听fd数目的增长而降低效率。因为在内核总的select实现中,它是采用轮询来处理的,轮询的fd数目越多原创 2012-07-24 17:10:12 · 5829 阅读 · 0 评论 -
对监听套接字进行read、write和connect操作会怎样?
已经学习的时候没有想过这个问题,只知道用监听套接字来执行accept操作,获取与客户端的连接,从来就没想过如果对监听套接字执行普通套接字的操作会怎样,今天特意做了个实验,对这三种情况进行测试。 一、 read操作 代码如下:#include #include #include #include #include #include #include #in原创 2012-07-25 10:58:41 · 3895 阅读 · 0 评论 -
C语言中结构体(struct)的初始化
struct结构体是C语言中非常重要的复合类型,初始化的方法很多,下面对这些方法进行总结,便于以后查阅。一、gcc扩展方式(不知道该如何命名) #include struct mych { int k;};struct myst { int i; int j; struct mych ch; }原创 2012-04-24 17:44:57 · 41581 阅读 · 3 评论 -
intptr_t 其实不是指针类型
最近在看nginx源码,看到有一个类型intptr_t,没有见过,google了一下,有人说是指针类型,但是看nginx源码中对该类型变量的使用,好像不是指针类型。static ngx_int_t 667 ngx_get_options(int argc, char *const *argv) 668 { 669 u_char *p; 670 ngx_int原创 2012-04-23 17:26:56 · 12491 阅读 · 3 评论 -
如何查找Linux中一些特殊数据类型定义,比如pid_t和uid_t
刚开始学习的时候看到像pid_t、uid_t这样的类型,总是想知道它的定义在哪,究竟是什么类型。但是直接看使用这些类型的函数的头文件根本就找不到。这里把我的一些经验分享给大家,希望有所帮助。 下面以pid_t类型和getpid函数为例,getpid的定义如下: #include #include pid_t getpid(void);原创 2012-07-28 12:42:46 · 16097 阅读 · 7 评论