游戏开发论坛

 找回密码
 立即注册
搜索
12
返回列表 发新帖
楼主: taizhezou

一个函数 int function( void ) 参数用void有什么作用啊?

[复制链接]

18

主题

279

帖子

279

积分

中级会员

Rank: 3Rank: 3

积分
279
QQ
发表于 2005-9-1 17:18:00 | 显示全部楼层

Re: 一个函数 int function( void ) 参数用void有什么作用啊?

没看到文章吗?那我帖一段代码,顺便解释一下:

//要用的东西都在这里
#include <stdarg.h>

//可变参数的函数
void function(int other, char *arg0, ...)
/*
    对于未给出声明的参数,我们需要自己确定其类型和数量,系统帮不上什么忙。
    一是预先设定好类型的排列顺序(用此函数的[B]人[/B]知道);
    二是通过某种符号,像printf(char*,...)那样。
*/
{
    //初始化参数列表,并定位到最后一个已知参数
    va_list ap;
    va_start(ap, arg0);

    //假设我们已经知道了下一个参数是int型
    //用如下方法获得它
    int arg1 = va_arg(ap, int);

    //假设我们已经知道了下一个参数是float型
    //用如下方法获得它
    double arg2 = va_arg(ap, double);

    //必须调用,因为上面的过程可能会改变栈状态
    va_end(ap);
}

看到了吗?float型变为double型了。
对于未声明的参数,编译器将它们自动提升至默认类型
既:char,short->int; float->double
而且,最后一个已知参数[B]必须[/B]是不会被提升的类型。

18

主题

279

帖子

279

积分

中级会员

Rank: 3Rank: 3

积分
279
QQ
发表于 2005-9-1 17:41:00 | 显示全部楼层

Re: 一个函数 int function( void ) 参数用void有什么作用啊?

关于如何知道参数的个数的问题,一般情况下是不可能的 [em22]
不信可以试试:printf("%s%i", "后面没有了!");
因为系统会在你给的参数后面多压入一个NULL指针(大多数系统是这样的,且NULL=0),如果你的参数[B]都是指针[/B],则会方便一些,可以用来检测一下。

6

主题

390

帖子

400

积分

中级会员

Rank: 3Rank: 3

积分
400
发表于 2005-9-1 18:31:00 | 显示全部楼层

Re:一个函数 int function( void ) 参数用void有什么作用啊?

是K&R C和ANSI C造的孽啊...

39

主题

102

帖子

102

积分

注册会员

Rank: 2

积分
102
 楼主| 发表于 2005-9-4 23:38:00 | 显示全部楼层

Re:一个函数 int function( void ) 参数用void有什么作用啊?

这是C语言的标准。
C语言标准规定:
int function( void );表示该函数不接受参数。
int function(/*空*/);表示该函数可接受任意数量的参数。

C++语言的标准作了如下修改:
int function( void );意思不变。
int function(/*空*/);等同于int function( void );
int function( ... );表示该函数可接受任意数量的参数。

----------------------------------------------------------------------------------------------


嗯,原来是这样,我明白了,非常感谢!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-27 16:55

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表