当前位置:  开发笔记 > 编程语言 > 正文

c中的typedef枚举说明

如何解决《c中的typedef枚举说明》经验,为你挑选了2个好方法。

我正在查看微控制器上ADC的头文件,其中包含以下代码.

/**
 * ADC channels type.
*/

typedef enum {
    ADC_CH_0,
    ADC_CH_1,
    ADC_CH_2,
    ADC_CH_3,
    ADC_CH_4,
    ADC_CH_5,
    ADC_CH_6, 
} adc_channel_t;

在ADC的main.c中有以下代码行

adc_channel_t channels[] = {ADC_CH_4, ADC_CH_5};

我想知道为什么你需要为ADC声明新的数据类型?什么typedef枚举意味着什么?

谢谢



1> Tommy Anders..:

作为artm的答案的typedef补充,在前面添加了enum,以便于使用enum.如果宣言看起来像这样:

enum adc_channel_t {
    ADC_CH_0,
    ADC_CH_1,
    ADC_CH_2,
    ADC_CH_3,
    ADC_CH_4,
    ADC_CH_5,
    ADC_CH_6, 
};

然后该行adc_channel_t channels[] = {ADC_CH_4, ADC_CH_5};必须写为:

enum adc_channel_t channels[] = {ADC_CH_4, ADC_CH_5};

typedef让我们忽视了enum在每次使用的类型.

使用有用的常量通常比"魔术数字"更受欢迎,尽管在这种情况下,常量可能看起来有点奇怪,常量几乎没有提供额外的信息.然而,它可以是有用的,因为枚举器用作额外的描述.例如,期望类型值的IDE将adc_channel_t能够建议通道:ADC_CH_0通过ADC_CH_6可能是有效的值范围,而不是简单地告诉您使用数字.



2> RedX..:

这样做的原因有很多。

    typedef是做什么的

    为什么用typedef枚举

A typedef允许您定义新类型。这样可以使您的意图更加清晰。

 char id; // but my id is a number!
 typedef unsigned char uint8; // ok now we can use uint8 instead of char
 uint8 id; // better! Now we know we should only interpret id as a number.

C语言中的第二个,您需要始终指定enumstruct引用它们:

enum CarModels_e {
    Bravia,
    Uno
};


enum CarModels_e the_model;
enum CarModels_e other_model
// this gets boring fast...

因此,程序员(懒惰的人)将尽量避免过多输入。为此,他们创建了一个新类型:

typedef enum CarModels_e CarModels; // now we don't need to type enum every time!

CarModels the_model;
CarModels other_model
// Less typing! Happier programmer!

但是仍然必须键入两次,enum CarModels_e以便它们也可以在一个声明中进行组合:

typedef enum /* Don't even need a name here anymore! Much less typing :) */ {
    Bravia,
    Uno
} CarModels;

为什么enum直接使用数字代替数字?因为这样可以给数字赋予含义。因此,下次他们(或其他任何人)阅读他们的代码时,他们仍然知道这些数字的含义。

// Example
if (measured_frequency == 12345) { // hmm where does this come from?

if (measured_frequency == MaximumMotorFrequency) { // Ah! Now i'll know what this is about in ten years!

推荐阅读
wurtjq
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有