有没有一种很好的方法来强制C中的类型不兼容?

mic*_*ljt 2 c type-conversion typechecking

出于类型检查的目的,我想在行上定义一个函数

void myfunc(type1 a, type2 b)
{
...
}
Run Code Online (Sandbox Code Playgroud)

哪里type1type2都是typedefed uint8_t.到目前为止这么好,但为了理智和检查目的(想想DbC)我想阻止使用type2第一个参数的值或type1第二个参数调用函数.可悲的是,C的隐式类型转换在这里反对我.有谁知道一种方式?

nur*_*ion 6

您可以将两种类型包装在Struct中.

typedef struct {
    uint8_t data;
} type1;

typedef struct {
    uint8_t data;
} type2;
Run Code Online (Sandbox Code Playgroud)

编辑:我不喜欢它,因为你现在必须使用a.data而不是a