C - 是否可以使用返回char *或int的函数?

时间:2016-01-08 09:27:38

标签: c

是否有可能获得一个函数来返回一个int或一个char *取决于执行时发生的事情?我尝试过无效,但在汇编时我得到了很多警告

示例

---
layout: default
title: Your website name
permalink: /about/
---

我希望我足够清楚。 PS:我是C编程的初学者

5 个答案:

答案 0 :(得分:5)

设计这样一个功能的理智方法是:

char* get_buffer (const char *str)
{
  if (I'm matching a condition in my string)
    return buffer;
  else
    return NULL;
}

(假设缓冲区不是局部变量)

答案 1 :(得分:2)

不,函数只能返回单个类型的值。但是你可以使用专门的类型:

struct result {
    int numeric;
    union {
         const char* string;
         int number;
    } value;
};


struct result
do_something() 
{
    struct result r;

    if (...) {

        r.numeric = 1;
        r.value.number = 10;

    } else {

        r.numeric = 0;
        r.value.string = "Foo!";
    }

    return r;
}

答案 2 :(得分:0)

尝试返回void*。它代表一个通用指针

更多信息:https://msdn.microsoft.com/en-us/library/fxky5d0w.aspx

您还可以尝试structunion并返回其中一个。有关详细信息,请参阅this

答案 3 :(得分:0)

一般来说,这是不可能的 - 即

char *f() {
  return 13;
}

是不允许的。但是,零是一种特殊情况(它表示'空指针',它不指向任何东西)。所以

char *f() {
  return 0;
}

的工作原理。你的代码草图表明你想要返回一个空指针,具体取决于某些条件是否为真,所以这可能就是你想要的。

答案 4 :(得分:0)

我建议使用包含所有必需返回值的相应get / set方法的类,或者使用union作为返回数据类型。然后在语义上更明显的是如何解释返回的数据。