C语言中的预编译消息

C语言中的预编译消息,c,c-preprocessor,compiler-warnings,avr,atmega,C,C Preprocessor,Compiler Warnings,Avr,Atmega,我正在编写一个函数,用C语言在ATMEGA32中配置外部中断 typedef enum{ LOW_LVL, CHANGE, FALLING, RISING }TRIGGER; void configExtInt(uint8_t ExtIntNo, TRIGGER trig){ sei(); if (ExtIntNo == INT0){ }else i

我正在编写一个函数,用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);

有可能吗?

[不确定我是否真的正确理解了你的问题]

假设
INTx
s是枚举,您可以使用一个开关来代替这几个if-thens

然后,一个体面的GCC会提醒您丢失案例:

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)
   ^~~~~~

我非常怀疑在这种情况下添加编译器警告是可能的。可能存在函数调用,其中extendno是用户输入、随机值或编译时未知的任何内容。也许您可以将代码更改为使用C定义,这些定义在编译时进行计算?您试图实现什么?文本“编译过程中的警告消息,以防它们不是INT0、INT1或INT2”不清楚。他们是谁?他们没有做什么?我认为澄清这一点很重要。@Anatoly他们指的是使用我将要构建的代码的人。我想我现在知道了您要实现的目标;我据此对问题进行了编辑。如果我猜错了,请回复和/或澄清。另外,对于像
TRIGGER t=choose_TRIGGER()这样的代码,您希望在编译期间发生什么;(t,下降)?警告错误?你不在乎?根据答案的不同,您可能需要也可能不需要彻底更改代码。