C泛型类型作为函数参数输入

标签 c function types struct arguments

所以我有两个不同的结构,其中我将访问的所有属性都是相同的。我还有一个功能,谁的论点,我希望能够接受两者中的任何一个。示例:

typedef struct{
    int whatnot = 14;
    int thing[11];
} TH_CONFIG;

typedef struct{
    int whatnot = 3;
    int thing[5];
} TH_CONFIG_2;

*_CONFIG var;

void fun(*_CONFIG input)
{
    input.whatnot = 5;
}

int main(){
    fun(var);
}

我可能有一个暗示,我应该使用 void 作为我可以类型转换或其他什么的类型?但我的搜索只产生了关于函数指针、模板和 C# 的东西。

编辑:*_CONFIG 在句法上并不意味着正确,它表示我不知道在那里做什么,但它应该是 _CONFIG 类型

最佳答案

可能的解决方案。

  1. 只需为它们都使用一个长度为 11 的数组。您的操作系统真的用完了最后 6 个字节吗?
  2. 让它成为一个动态数组。
  3. 只用汇编写,你显然不关心 C 的高级性。
  4. 使用像 C++ 这样支持模板或多态性的语言。
  5. 只需传入您关心的struct 的参数即可。

    void fun(int* whatnot) { *诸如此类= 5;

    int 主要(){ 乐趣(&myStruct.whatnot); 返回 0;

  6. 将因素纳入准 OO 设计。

    结构{ 诸如此类; } typedef 通用;

    结构 TH_CONFIG_1 { 常见的; 内部事物[11]; };

    结构 TH_CONFIG_2 { 常见的; 内部事物[5];

但如果你坚持...

void fun(void* input) {
    ( (int)(*input) ) = 5;
}

或者...

void fun(void* input) {
    ( (TH_CONFIG*) input)->whatnot = 5; // may have been a TH_CONFIG_2, but who cares?
}

注意:这不会通过任何 C 商店的代码审查。

关于C泛型类型作为函数参数输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15340229/

相关文章:

c - C 中的所有权约定

c++ - automake 和项目依赖

c++ - 为什么使用 switch-case 时会得到 `warning: control reaches end of non-void function`?

javascript - 可以在 Typescript 中输入递归可变参数函数吗?

c++ - 如何在主执行之外运行 C++ 可执行文件

c - 如何在此实例中使用从函数返回的 const char 指针? (mongodb相关)

C 编程使用静态函数将华氏温度转换为摄氏度误差

python - 在类对象中存储未绑定(bind)的 python 函数

types - 受歧视联盟中的 fsharp 记录

go - 如何检查值是否为 float