具有不同参数的函数的C冲突类型

时间:2012-02-04 21:26:23

标签: c struct initialization

我有一个带有2个初始化函数的结构,它们使用不同类型的参数:

struct myStruct;
typedef struct myStruct *myStruct;

INFNumber *myStructMake(long long arg);
INFNumber *myStructMake(char *arg);

我在第二个声明中遇到conflicting types for 'myStructMake'错误。 C不能具有2个具有不同参数的同名函数吗?或者是出于其他原因?

2 个答案:

答案 0 :(得分:9)

  

C不能具有2个相同命名的功能   不同的参数

没错,没有超载。您必须使用不同的名称或选择其他方案(如传递其他参数)。

答案 1 :(得分:0)

在同一结构类型中处理不同数据类型需求的最佳方法是执行以下操作:

struct s_my_struct
{
  void *data;
  char data_type;
}

with:

#define DATA_TYPE_LONGLONGP 'm'
#define DATA_TYPE_CHARP 's'

并使用如下:

if (mystruct.data_type == DATA_TYPE_CHARP)
{
  // use of ((char*)mystruct.data)
}
else if (mystruct.data_type == DATA_TYPE_LONGLONG)
{
  // use of ((long long*)mystruct.data)
}

请注意,因为struct存储指针大小的数据,所以总是必须使用指针而不是平面类型。