我正在写一个用C语言在ATMEGA32中配置外部中断的函数

    typedef enum{
        LOW_LVL,
        CHANGE,
        FALLING,
        RISING
        }TRIGGER;

    void configExtInt(uint8_t ExtIntNo, TRIGGER trig){
        sei();
        if (ExtIntNo == INT0){

        }else if (ExtIntNo == INT1){

        }else if (ExtIntNo == INT2){

        }else{
            cli();
        /* warning message here*/
        }
    }

我想在编译期间显示一条警告消息,以防我的函数的用户向我的函数提供了INT0、INT1、INT2以外的参数。
例如:
configExtInt (INT3, FALLING);

有可能吗?

最佳答案

[不确定我是否真的理解了你的问题]
假设INTxs是枚举,那么可以使用一个开关来代替这几个if-thens。
一个像样的海合会就会警告你失踪的案子:

enum Ints
{
  INT0,
  INT1,
  INT2
}

int main(void)
{
  enum Ints e = ...; /* Initialise to some value here. */

  switch (e)
  {
    case INT0:
      break;

    case INT1:
      break;
  }

  return;
}

使用
gcc -g  -Wall  -Wextra -Wconversion -pedantic  main.c

得到:
main.c:12:3: warning: enumeration value ‘INT2’ not handled in switch [-Wswitch]
   switch (e)
   ^~~~~~

09-25 18:14