如何使用Intel C编译器为双重函数返回NULL?

时间:2010-05-27 16:45:52

标签: c null intel

我有一些代码,我使用MIPS编译器从SGI系统移植。它具有声明具有双返回类型的函数。如果函数找不到正确的double,那些函数将返回“NULL”

intel C编译器不喜欢这样,但我试图看看是否有一个编译器选项来启用这个“功能”,这样我就可以在不改变代码的情况下进行编译。我检查了手册页,似乎无法找到它。

由于

当前存在的代码示例,并且可以正常使用MIPS

 double some_function(int param){
     double test = 26.25;
 if(param == 10){
    return test;
 }
 return (NULL);
 }

intel编译器抱怨: 错误:返回值类型与函数类型

不匹配

6 个答案:

答案 0 :(得分:3)

通过编译器选项可能存在“NaN”(非数字)功能。但那仍然不会是空的。

答案 1 :(得分:2)

根据您的评论:

  

我刚检查过,调用函数只是使用它,好像它是一个有效的double(在if语句中)

我只是将功能修改为return 0;而不是return NULL;

答案 2 :(得分:1)

这不是编译器选项,但您可以#define NULL 0(理论上)获得所需的效果。

答案 3 :(得分:1)

你确定他们没有返回指向双倍的指针吗? NULL double是没有意义的,因为零是double的有效值。

答案 4 :(得分:0)

从函数返回时,

NULL不一定具有特殊含义。如果要指示函数未成功完成,常用技术是返回一些在正常情况下永远不会返回的值。通常,这意味着返回无效值。当函数返回指针时,它通常使用NULL作为返回值来表示错误,因为NULL指针很少是用户期望函数返回的值。

常量NULL仅在指针的上下文中有意义,并且由于您返回标量值,编译器正在抓紧使用NULL。而不是返回NULL,找到一些永远不会是有效返回值的值,并将其用作错误指示符。为了更清楚地了解您正在做什么,请使用#define AN_ERROR_OCCURED <<someval>>使用常量对该值进行别名,以避免使用“幻数”。

另一种常见的方法是使用errno全局(see errno.h)。如果您的函数遇到错误,请在返回之前将errno设置为某个非零值。然后,调用您的函数的代码可以使用if (errno) {...}等内容检查和处理错误。

另一种方法是,如果成功则返回零,否则返回非零错误代码。如果用户需要从函数中获取数据,则必须将额外的“返回缓冲区”指针传递给函数。

答案 5 :(得分:0)

我想我只会使用#ifdef INTEL作为编译器标志,并为该编译时选项定义返回值为零。有点痛,但似乎是最好的方式。