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

C 函数返回类型的名称作为用户定义数据类型的名称,c,enums,user-defined-types,C,Enums,User Defined Types,在C语言中,使用enum将函数命名为与用户定义的数据类型相同的函数是否合法? 例如: enum sentence_id sentence_id(const char *sentence, bool strict); 枚举语句_id的定义如下所示 enum sentence_id { MINMEA_INVALID = -1, MINMEA_UNKNOWN = 0, MINMEA_SENTENCE_RMC, MINMEA_SENTENCE_GGA, MINMEA_SENTENCE_GSA, };

在C语言中,使用enum将函数命名为与用户定义的数据类型相同的函数是否合法? 例如:

enum sentence_id sentence_id(const char *sentence, bool strict);
枚举语句_id的定义如下所示

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

};  

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

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

让我们给他们起不同的名字:

enum minmea_sentence_id_e 
{
…
}; 
这定义了一个名为
minmea\u-statement\u-id\u-e
的枚举

该函数还获取另一个标识符:

enum minmea_sentence_id_e minmea_sentence_id_f(const char *sentence, bool strict);
现在应该很清楚,有一个名为
minmea\u-sensition\u-id\u-f
的函数返回一个名为
minmea\u-sensition\u-id\u-e
的枚举值

我不明白这句话的意思

所以我假设这不是你的代码。让我们看看另一个人写了什么:

在(Objective-)C中,这声明了一种枚举类型,
minmea\u-sensume\u-id
,它通过在名称前面加上
enum
来使用。例如:

enum minmea_sentence_id mySentenceID;
声明一个名为
mycentenceid
的类型为
enum minmea\u statement\u id
的变量

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

typedef enum { ... } minmea_sentence_id;
然后,
minmea\u句子\u id
本身就是一个类型名,上面的示例声明就是:

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

为什么重复两次

他们编写了函数声明:

enum minmea_句_idminmea_句_id(const char*句,bool strict)

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

接下来是要声明的函数名,
minmea_-sensume_-id
,这看起来很奇怪——将函数命名为与类型相同的函数——但一点也不非法,尽管通常会强烈反对,因为这会使代码更难阅读

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

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

现在考虑一下调用<代码> MyMeaStEngEnsixIDI/Case>函数的样子:

enum minmea_sentence_id mySentenceID = minmea_sentence_id("my sentence", TRUE);
有点像函数式的演员阵容。也许他们就是这么想的,但这只是猜测而已


HTH

请选择一种语言。它是返回定义类型的函数。类型和函数的名称相同。它在C语言中工作,但复制标识符是一个坏主意。如果您理解它,就没有什么期望,因为它只是无效的C代码。请澄清您要查找的内容。
[返回类型][函数名称]([args list])
应用于您的代码,函数
minmea_句子id
将返回一个
枚举minmea_句子id
值。使用相同的标识符两次是不好的做法,但这是可能的。读这篇文章时,就好像它说的是
enum minmea_句子\u id my_函数(…)
,并且知道如果您分配返回值,该变量应该声明为
enum minmea_句子\u id my_var现在清楚了。。谢谢:-)
int x = (int)expo; // valid in (Objective-)C(++)
int y = int(expr); // valid in (Objective-)C++ and NOT in (Objective-)C
enum minmea_sentence_id mySentenceID = minmea_sentence_id("my sentence", TRUE);