函数返回类型的名称作为用户定义数据类型的名称

时间:2016-06-07 16:17:28

标签: c enums user-defined-types

在C中用enum命名一个与用户定义数据类型相同的函数是否合法? 例如:

enum sentence_id sentence_id(const char *sentence, bool strict);

和enum sentence_id定义如下:

enum sentence_id {
MINMEA_INVALID = -1,
MINMEA_UNKNOWN = 0,
MINMEA_SENTENCE_RMC,
MINMEA_SENTENCE_GGA,
MINMEA_SENTENCE_GSA,

};  

是否适用于其他用户定义的数据类型(作为结构)?

2 个答案:

答案 0 :(得分:2)

这看起来很奇怪,因为枚举和函数的标识符是相同的,这是可能的,因为枚举标识符始终必须遵循enum关键字,enum始终跟随标识符。

所以让我们给他们不同的名字:

enum minmea_sentence_id_e 
{
…
}; 

这定义了一个名为minmea_sentence_id_e的枚举。

该函数也会获得另一个标识符:

enum minmea_sentence_id_e minmea_sentence_id_f(const char *sentence, bool strict);

现在应该很清楚,有一个名为minmea_sentence_id_f的函数返回一个名为minmea_sentence_id_e的枚举值。

答案 1 :(得分:0)

  

我不明白这句话的含义

所以我认为这不是你的代码。让我们看看对方写的是什么:

enum minmea_sentence_id { ... };

在(Objective-)C中,这声明了一个枚举类型minmea_sentence_id,它通过在名称前添加enum来使用。例如:

enum minmea_sentence_id mySentenceID;

声明一个名为enum minmea_sentence_id的{​​{1}}类型的变量。

请注意,如果不是上述内容,他们写了:

mySentenceID

然后typedef enum { ... } minmea_sentence_id; 本身就是一个类型名称,上面的示例声明就是:

minmea_sentence_id

但是他们没有这样做,因此在使用类型时需要minmea_sentence_id mySentenceID;

  

为什么重复两次?

他们写了函数声明:

  

enum minmea_sentence_id minmea_sentence_id(const char * sentence,bool strict);

函数声明中的第一项是返回类型,从上面我们知道这是前两个标记enum

接下来是声明的函数的名称enum minmea_sentence_id,看起来很奇怪 - 命名一个函数与一个类型相同 - 但根本不是非法的,但通常强烈建议不要因为它使代码更难读!

这就是为什么它会重复两次,但为什么他们会这样做呢?

我们只能猜测,但是(Objective-)C ++支持函数式转换,例如:

minmea_sentence_id

现在考虑调用int x = (int)expo; // valid in (Objective-)C(++) int y = int(expr); // valid in (Objective-)C++ and NOT in (Objective-)C 函数的内容:

minmea_sentence_id

有点像功能风格的演员表。也许这就是他们的想法,但这只是猜测!

HTH