#error
ほとんどのコンパイラ(プリプロセッサ)では、ディレクティブを使用できます。
つまり
#define ADC_CHANNEL 34
#if ADC_CHANNEL > 23
#error ADC_CHANNEL exceeds maximum allowed value
#endif
上記はエラーをスローし、コンパイルされません。
次に、ADC_CHANNELを関数への入力として使用します。
または、を作成ADC_CHANNEL
して、、...enum
を定義することもできます。次に、関数に型、または呼び出したいものを指定します。そうすると、列挙型を引数として関数が呼び出された場合、範囲外の値を使用する方法がなくなります。ADC_CHANNEL_0 = 0
ADC_CHANNEL_1 = 1
ADC_CHANNEL_23 = 23
ADC_CHANNEL_t
例:
typedef enum {ADC_CHANNEL_0 = 0,
ADC_CHANNEL_1 = 1,
ADC_CHANNEL_2 = 2,
// ...etc...
ADC_CHANNEL_22 = 22,
ADC_CHANNEL_23 = 23} adc_channel_t;
void setClearAdcPin(adc_channel_t adcChannel) {
// ...function body...
}
= 0
(コンパイラは順序からそれを推測するため、技術的には、、などは必要ありません= 1
。デフォルトでは、enum
sは0から始まり、値ごとに1ずつ増加します。ただし、各値を手動で定義する方が安全であり、さまざまなことができます。連続していなくても、使用する可能性のある3つの可能なADCチャネルのみを含めるようにします。)