bjjette 发表于 2024-4-25 11:52

关于C/C++语言枚举使用的讨论

枚举(Enumeration)是一种用户定义的数据类型,它包含了一组具名的整数值。枚举的主要用途是为程序中的某些变量或常量提供一组预定义的、有意义的标签或名称,从而增加代码的可读性和可维护性。现在讨论一个问题, 使用枚举作为函数返回值,这个是否有必要的场景,咋感觉有点哪里不对。还有对安全软件这样写代码有什么可能风险,使用C++Test做代码走查,提示“表达式的值不得赋值给具有较窄基本类型或不同基本类型的对象”以及“禁止隐式声明函数”。举例如下:
enum Weekday {
          Monday,
         Tuesday,
         ........
          };

enum Weekday TestFunc();
.........
enum Weekday atest;
.........
atest = TestFunc();    /*使用C++Test代码走查报错*/
..........

backaxe 发表于 2024-4-25 12:22

TestFunc()的返回值确认是正确的类型吗

go4399 发表于 2024-4-25 12:55

本帖最后由 go4399 于 2024-4-25 12:57 编辑

贴完整代码

把这几个enum去掉呢
Weekday TestFunc();
.........
Weekday atest;
.........
atest = TestFunc();

jamesAbc 发表于 2024-4-25 13:21

C++11中enum定义为class,可以防止整形的隐式转换,而且可以限制作用域防止名字冲突,代码更加安全,可以考虑这种新的枚举定义方式

bester 发表于 2024-4-25 14:04

https://blog.csdn.net/yhc166188/article/details/78330917

使用enum class 进行定义

bjjette 发表于 2024-4-25 14:15

backaxe 发表于 2024-4-25 12:22
TestFunc()的返回值确认是正确的类型吗

里面返回就是enum WeekDay类型

bjjette 发表于 2024-4-25 17:40

go4399 发表于 2024-4-25 12:55
贴完整代码

把这几个enum去掉呢


因公司限制原因,无法贴完整代码,我做了一个main函数,只有这些内容,可以通过C++Test,不报错。但是在工程中就报错。

go4399 发表于 2024-4-25 21:52

如果支持C++11及以上,可以用enum class
enum class Weekday {
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday,
Sunday
};

Weekday TestFunc() {
return Weekday::Monday;
}

int main() {
Weekday atest = TestFunc();
return 0;
}

bjjette 发表于 2024-4-26 09:12

go4399 发表于 2024-4-25 21:52
如果支持C++11及以上,可以用enum class
enum class Weekday {
Monday,


谢谢。这个思路不错,安全代码不能用C++的类
页: [1]
查看完整版本: 关于C/C++语言枚举使用的讨论