typedef 变量上缺少强制转换的编译器警告

标签 c gcc

我找不到这样做的方法,但是是否有 GCC/LLVM 的编译器标志,我可以在其中警告我:

typedef float distance_feet_t;
typedef float distance_meters_t;

void shouldWarnMe ( void )
{
    distance_feet_t feet = 10.0f;
    distance_meters_t meters = 20.0f;

    /* this should generate a warning */
    distance_meters_t total = meters + feet;
}

本质上,我想重新定义变量类型,这样如果我开始混合它们,编译器就会警告我缺少转换。

我试过 -Wall: 没有警告。

有很多方法可以不使用 typedef 来解决这个问题。然而问题是,有没有一种方法可以按照描述的那样使用 typedef 来实现?

最佳答案

没有。就编译器而言,distance_feet_tdistance_meters_t 是完全相同的类型。我不知道在纯 C 中有什么方法可以做到这一点,但你绝对可以在 C++ 中通过为每个不同的单元类型定义一个类并定义适当的重载运算符来做到这一点(尽管那里有很多烦人的样板)。

旁注:全局范围内以后缀 _t 结尾的标识符被 POSIX 标准视为保留;我建议避免使用此类标识符,尽管发生冲突的可能性非常低(并且很容易修复,如果发生的话)。

关于typedef 变量上缺少强制转换的编译器警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12943476/

相关文章:

c - 如何使用 fgets 在 for 循环中计算磁盘读取速度(以 MB/s 为单位)

c++ - 通过宏替换展开循环无效

c++ - 如何为 MinGW 用户安装 gcc-arm-none-eabi?

c++ - 未编译函数模板中使用的类的前向声明

c++ - 继承二级基类构造函数: silent error

c++ - 使用 gcc 或 clang 自动生成 header

c++ - 并发空间上很酷的开源项目?

c - Scanf在C中循环时跳过其他所有

c - 在c中为二维数组赋值

c - 关于隐式定义函数的警告,在 clang 中有效,在 GCC 5.4 中失败