我正在写一个用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。
一个像样的海合会就会警告你失踪的案子:
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)
^~~~~~