C语言中的预编译消息
我正在编写一个函数,用C语言在ATMEGA32中配置外部中断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
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,下降)代码>?警告错误?你不在乎?根据答案的不同,您可能需要也可能不需要彻底更改代码。