C 函数返回类型的名称作为用户定义数据类型的名称
在C语言中,使用enum将函数命名为与用户定义的数据类型相同的函数是否合法? 例如: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, };
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);