簡體   English   中英

我可以讓C函數返回任意類型嗎?

[英]Can I make a C function return an arbitrary type?

我編寫了一個解釋串行數據(CAN)的函數,當前返回一個浮點數。 我希望函數包含一個參數,其中用戶在字符串中指定返回類型,並且該函數返回該類型的值。 這只是一個方便的事情,避免必須編寫幾乎共享所有相同代碼的多個函數。

將void指針傳遞給要返回的數據類型。

void foo(char* szType, void *pOut) {
  switch (szType[0]) {
    case 'I': *(int*)pOut = 1; break;
    case 'F': *(float*)pOut = 1; break;
  }
}

使用這樣:

int a;
float b;
foo("I", &a);
foo("F", &b);

johnnycrash的答案是正確的,但如果你想返回一個特定類型的對象(而不是使用call-with-parameter-equal- void *指針),還有另一種方法。 這是通過返回所請求類型的malloc() 'd對象來實現的。

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

void *
foo (char *mytype)
{
  switch (mytype[0])
    {
    case 'I':
      {
        int *i = malloc (sizeof (int));
        *i = 1;
        return i;
      }
    case 'F':
      {
        double *d = malloc (sizeof (double));
        *d = 1.234;
        return d;
      }
    default:
      return NULL;
    }
}

int
main (int argc, char **argv)
{
  int *ii;
  double *dd;

  ii = foo ("I");
  printf ("Integer is %d\n", *ii);
  free (ii);

  dd = foo ("F");
  printf ("Double is %f\n", *dd);
  free (dd);
  exit (0);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM