打印

ads中关于函数指针转换的很奇怪的问题,哪位dx知道为什么不

[复制链接]
3567|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
luocolor|  楼主 | 2007-1-19 21:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在isr.c中有

void (*InterruptHandlers[MAXHNDLRS])(void)={NULL,};

如果只是这样,在ads中编译编译报错,具体为:

Error    :C2456E: undeclared name, inventing 'extern int NULL'
Error    :C2922W: '=': cast between function pointer and non-function object.
Error    :(Serious) C2432E: non-constant initialiser

通过比较别人的代码,然后在isr.c中include "def.h",
def.h具体为

#ifndef __DEF_H__
#define __DEF_H__

#define U32 unsigned int
#define BOOL int
#define U16 unsigned short
#define S32 int
#define S16 short int
#define U8  unsigned char
#define    S8  char
#define u32 unsigned int
#define u16 unsigned short
#define s32 int
#define s16 short int
#define u8  unsigned char
#define    s8  char
#define TRUE     1
#define FALSE     0
#define OK        1
#define FAIL    0
#define NULL    0

#endif /*__DEF_H__*/

然后编译,居然通过了,这里面的蹊跷是怎么样的呢?????

我在vc6.0里面定义void (*InterruptHandlers[MAXHNDLRS])(void)={NULL,};
编译正确。

所以,这里面因为ads对指针有什么不一样吗?

相关帖子

沙发
computer00| | 2007-1-20 00:15 | 只看该作者

是因为NULL没定义吧?你把NULL改成0,再编译试试?

NULL可不是C语言的关键字.

使用特权

评论回复
板凳
luocolor|  楼主 | 2007-1-20 01:16 | 只看该作者

呵呵

改成0就可以了。!
看来现在的学生,包括我,大多数都被MS的东西惯坏了!
现在突然想起linux下的编程就没有像VC里面那样定义NULL了。
唉~!!!!

使用特权

评论回复
地板
computer00| | 2007-1-20 14:38 | 只看该作者

我不大喜欢用NULL,基本上都是用0的。既直观又简便

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

40

主题

105

帖子

0

粉丝