代码之家  ›  专栏  ›  技术社区  ›  Nick

基于常量值的强制C编译器错误

  •  2
  • Nick  · 技术社区  · 16 年前

    我在C类中定义了一个私有常量。我希望编译失败,如果这个int mod 3的值出错!= 0。我怎样才能做到这一点?

    4 回复  |  直到 16 年前
        1
  •  4
  •   Mark Cidade    16 年前

    Timothy Khouri差点就拿到了。应该是这样:

    int compilerError = 1 / (MY_CONST % 3 == 0 ? 1 : 0);
    
        2
  •  2
  •   Mark Cidade    16 年前

    虽然有一个 #error 预处理器指令用于生成编译时错误,它无法基于常量值的存在。它只适用于编译器符号,如“debug”,不能为其赋值。

        3
  •  1
  •   Timothy Khouri    16 年前

    抱歉,我在下面说的代码不起作用,但这会:)

    int pointless = 1 / (MY_CONST % 3);
    

    这将起作用的原因是因为您将得到一个编译时的“不能被零除”错误。你的“我的常数”字段必须是(一旦修改为3)不等于零的任何字段。

        4
  •  -1
  •   David Arno    16 年前

    试试这个:

    if (MY_CONST % 3 != 0) { int compilerError = 1 / 0; }