吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 224|回复: 8
收起左侧

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

[复制链接]
bjjette 发表于 2024-4-25 11:52
枚举(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
 楼主| 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
[C++] 纯文本查看 复制代码
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
[mw_shl_code=cpp,true]enum class Weekday {
  Monday,

谢谢。这个思路不错,安全代码不能用C++的类
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止回复与主题无关非技术内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-5-5 01:06

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表