一个很蛋疼的函数定义方式~

kitcaii 2010-07-16 06:00:38

/**************** list.h ********************/
typedef struct {
void **item;
int num;
} LIST;

#ifdef WIN32

#ifdef __cplusplus
extern "C" {
#endif
extern int AppendItem(LIST *pList,void *pItem);

#ifdef __cplusplus
}
#endif

#else
extern int AppendItem();

#endif


/**************** list.c ********************/
int AppendItem(pList,pItem)
LIST *pList;
void *pItem;
{
void **pItems;
if(pList->num>0 && pList->num%LIST_BLOCK_SIZE==0)
{
pItems=realloc(pList->items,
(pList->num+LIST_BLOCK_SIZE)*sizeof(void*)
);
if(pItems==NULL)
return(-1);
pList->item = pItems;
}
pList->item[pList->num] = pItem;
pList->num++;
return(0);
}


1.函数定义部分中函数头这么写是什么意思?
2.如果没有定义WIN32,函数声明为无参型的,函数定义却是有参型的,怎么保证正确调用?
...全文
101 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhangweiit 2010-07-16
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 pengzhixi 的回复:]

引用 6 楼 zhangweiit 的回复:

请在看看你的调用吧
[/Quote]

可是,确实可以调用啊
kitcaii 2010-07-16
  • 打赏
  • 举报
回复
非常感谢zhangweiit,终于不再蛋疼了
非常感谢楼上各位~
pengzhixi 2010-07-16
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 zhangweiit 的回复:]
声明无参,调用可以有参,
所以,1楼的观点,我太同意,并没有一个其它文件定义一个无参版本
[/Quote]
请在看看你的调用吧
zhangweiit 2010-07-16
  • 打赏
  • 举报
回复
声明无参,调用可以有参,
所以,1楼的观点,我太同意,并没有一个其它文件定义一个无参版本
zhangweiit 2010-07-16
  • 打赏
  • 举报
回复
楼主肯定很疑惑,哪里来的无参版本,

list.c中的
int AppendItem(pList,pItem)
LIST *pList;
void *pItem;
{
...
}

这个函数就可以看作为无参版本
在C中是可以编译通过的,

不信,你看下面这个程序



#include <stdio.h>
#include <stdlib.h>

int kick();

int main()
{
int i = 1;
kick(i);
getchar();
return 0;
}

int kick(int i)
{
printf("----");
}


zhangweiit 2010-07-16
  • 打赏
  • 举报
回复
int AppendItem(pList,pItem)
LIST *pList;
void *pItem;
{
...
}
这个写法是c90标准之前的写法,
目前正规写法当然是int AppendItem(LIST *pList, void *pItem);

上面的预处理命令中声明
如果 WIN32 && c++
那就使用这个版本
int AppendItem(LIST *pList,void *pItem);
否则使用无参版本
int AppendItem();

ypb362148418 2010-07-16
  • 打赏
  • 举报
回复
支持LS的,蛋疼你还那样写
lovesi3344 2010-07-16
  • 打赏
  • 举报
回复
C语言的写法
int AppendItem(pList,pItem)
LIST *pList;
void *pItem;

C++的写法
int AppendItem(LIST *pList,void *pItem)


就好像
C语言的写法
int func(argc,argv)
int argc;
char**argv;

可以写成
int func(int argc, char **argv);
这样写更简洁
pengzhixi 2010-07-16
  • 打赏
  • 举报
回复
1. int AppendItem(pList,pItem)
LIST *pList;
void *pItem;

这是老式写法 新写法是:int AppendItem(LIST *pList,void *pItem)


2 看到extern int AppendItem();了吗?这表明这个函数在其他源文件定义

64,683

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧