当前位置:首页 » 编程博文
开发技术指南» 文章正文
    引言: C语言中有些函数使用可变参数,比如常见的int printf(
 

 

    摘要:mysql数据库表生成hibernate配置文件及java类文件具体如下: 1. 需要的包: a. hibernate-2.1.6.zip b. hibernate-extensions-2.1.2.zip c. mysql-connector.jar 2. 具体配置: a. setenv.bat配置如下: @echo off rem ---------......
 ·eclipse3.0开发系列之vss版    »显示摘要«
    摘要:使用eclipse3.0开发时,如果想与vss相结合,首先需要下载支持eclipse3.0的vss的插件,下载网站为http://www.eclipse-plugins.info/eclipse/rating_details_plugin.jsp;jsessionid=8ab256b4b53bcb19160c2b35b8187096?plugin_id=78 解压此文件到\plugins目录......


浅谈C语言的可变参数
  c语言中有些函数使用可变参数,比如常见的int printf( const char* format, ...),第一个参数format是固定的,其余的参数的个数与类型都不固定.

  在stdarg.h头文件中,针对不同平台有不同的宏定义,我们选取x86平台下的宏定义: 【程序编程相关:阎宏:Java语言简单工厂创立性模式介绍

  c语言用va_start等宏来处理这些可变参数.这些宏看起来很复杂,其实原理挺简单,就是根据参数入栈的特点从最靠近第一个可变参数的固定参数开始,依次获取每个可变参数的地址.下面我们来分析这些宏. 【推荐阅读:读取英文单词,按顺序排列(C++学习题目

【扩展信息:关于文化产业投资要点策划与原创创意的探讨

typedef char *  va_list;

#define _intsizeof(n)   ( (sizeof(n) + sizeof(int) - 1) & ~(sizeof(int) - 1) )

#define va_start(ap,v)  ( ap = (va_list)&v + _intsizeof(v) )

#define va_arg(ap,t)    ( *(t *)((ap += _intsizeof(t)) - _intsizeof(t)) )

#define va_end(ap)      ( ap = (va_list)0 )

 

  _intsizeof(n)宏是为了考虑那些内存地址需要对齐的系统,从宏的名字来应该是跟sizeof(int)对齐.一般的sizeof(int)=4,也就是参数在内存中的地址都为4的倍数.比如,如果sizeof(n)在1-4之间,那么_intsizeof(n)=4;如果sizeof(n)在5-8之间,那么_intsizeof(n)=8.

  为了能从固定参数依次得到每个可变参数,va_start,va_arg充分利用下面两点:

  1. c语言在函数调用时,先将最后一个参数压入栈

  2. x86平台下的内存分配顺序是从高地址内存到低地址内存


...   下一页
    摘要:udp协议是1种无连接的协议,他和tcp协议比较有传输速度快,占用资源少的问题。但是由于udp协议本身没有自动找包的功能,因此经常会出现丢包的现象,会造成传送的文件丢包的现象因为时间匆忙和水平有限,本人在效率上没有作优化,只是简单的实现,请大家自己看源码吧注释:主要功能:把文件猜成4k大小的包 在包头+上包的长度 接受了1个包判断长度是否和接受的长度相符如果 符合那么就继续发,如果出现丢包那么就......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE