我的代码传递指向标量类型的指针,这些标量类型代表容易混淆的不同事物。我认为编译器可以帮助我解决这个问题。
这是一个测试程序:
typedef int type_a;
typedef int type_b;
type_a do_something_with_a(type_a* pa)
{
return *pa + 3;
}
int main(void)
{
type_b b = 0;
do_something_with_a(&b); /* This is a bug. */
return 0;
}
我将 B 传递给一个只应该用 As 做事的函数,但 gcc 甚至没有发出警告:
$ gcc -Wall typesafe2.c
$
有没有一种优雅的方法可以让我编写等效代码,但当我犯了如此可怕的错误时让编译器抛出错误?
最佳答案
代替 typedef int type_a;
等,使用 typedef struct { int value; } type_a;
关于c - 我如何让 gcc 告诉我传递了错误的标量类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15201142/