相关疑难解决方法(0)

C中枚举的大小是多少?

我正在创建一组枚举值,但我需要每个枚举值为64位宽.如果我没记错的话,枚举通常与int的大小相同; 但是我认为我读过某个地方(至少在GCC中),编译器可以使枚举成为保持其值所需的任何宽度.那么,有可能有一个64位宽的枚举?

c enums

138
推荐指数
3
解决办法
17万
查看次数

sizeof(enum)== sizeof(int),总是吗?

sizeof(enum)== sizeof(int),总是吗?

  • 还是编译器依赖?
  • 这是错误的,因为编译器针对字长度(内存对齐)进行了优化,即y int是特定编译器上的字大小?如果我使用枚举,这是否意味着没有处理惩罚,因为它们将是字对齐的?
  • 如果我将所有返回代码放在枚举中是不是更好,因为我显然不担心它获得的值,只检查返回类型时的名称.如果是这种情况,#DEFINE会更好,因为它可以节省内存.

通常的做法是什么?如果我必须通过网络传输这些返回类型,并且必须在另一端完成某些处理,那么您更喜欢枚举/ #define/const ints.

编辑 - 只是检查网络,因为编译器不象征性地链接宏,人们如何调试,比较整数值与头文件?

来自答案 - 我在下面添加这一行,因为我需要澄清 -

"因此它是实现定义的,而sizeof(枚举)可能等于sizeof(char),即1."

  • 这是否意味着编译器检查枚举中的值范围,然后分配内存.我不这么认为,当然我不知道.有人可以解释一下"可能是什么".

c enums const c-preprocessor

58
推荐指数
4
解决办法
6万
查看次数

您使用C++中的哪种Typesafe枚举?

众所周知,C++中的内置枚举不是类型安全的.我想知道实现类型安全枚举的哪些类在那里使用...我自己使用以下"自行车",但它有点冗长和有限:

typesafeenum.h:

struct TypesafeEnum
{
// Construction:
public:
    TypesafeEnum(): id (next_id++), name("") {}
    TypesafeEnum(const std::string& n): id(next_id++), name(n) {}

// Operations:
public:
    bool operator == (const TypesafeEnum& right) const;
    bool operator != (const TypesafeEnum& right) const;
    bool operator < (const TypesafeEnum& right) const;

    std::string to_string() const { return name; }

// Implementation:
private:
    static int next_id;
    int id;
    std::string name;
};
Run Code Online (Sandbox Code Playgroud)

typesafeenum.cpp:

int TypesafeEnum::next_id = 1;

bool TypesafeEnum::operator== (const TypesafeEnum& right) const 
{ return id == right.id; }

bool TypesafeEnum::operator!= …
Run Code Online (Sandbox Code Playgroud)

enums design-patterns enumeration type-safety c++03

44
推荐指数
4
解决办法
2万
查看次数

33
推荐指数
7
解决办法
3万
查看次数

枚举或定义,我应该使用哪一个?

对于定义样式的示例,枚举和#define似乎能够做同样的事情.理解#define是编译器预处理器的宏替换.有什么情况比另一个更受欢迎吗?

typedef enum {
    SelectionStyleNone,
    SelectionStyleBlue,
    SelectionStyleRed
} SelectionStyle;
Run Code Online (Sandbox Code Playgroud)

VS

#define SELECTION_STYLE_NONE 0
#define SELECTION_STYLE_BLUE 1
#define SELECTION_STYLE_RED  2
Run Code Online (Sandbox Code Playgroud)

objective-c

8
推荐指数
2
解决办法
1335
查看次数

使用枚举的一些好例子

当我学习C时我学会了枚举,并不时地提醒自己,并且大部分时间通过从某些来源重新阅读,我发现这是因为我从未在编程中使用它,我的编程兴趣集中在算法问题解决上,所以我不确定在哪里可以使用枚举.

有人可以提出一些很好的例子,使用枚举可以让事情变得简单吗?

我会赞赏算法示例,但欢迎算法或非算法示例.

c c++ enums

8
推荐指数
3
解决办法
7万
查看次数

C 中的模式设置:枚举、常量、定义

我读过有关该主题的几个问题:

我知道在宏上通常首选#define枚举,以获得更好的封装和/或可读性。另外,它允许编译器检查类型以防止出现某些错误。

const声明介于两者之间,允许类型检查和封装,但更混乱。

现在我在内存空间非常有限的嵌入式应用程序中工作(我们经常必须争取字节节省)。我的第一个想法是常量比枚举占用更多的内存。但我意识到我不确定常数将如何出现在最终固件中。


例子:

enum { standby, starting, active, stoping } state;
Run Code Online (Sandbox Code Playgroud)

问题

在资源有限的环境中,enumVS#define与 VSstatic const在执行速度和内存占用方面如何比较?

c embedded enums

2
推荐指数
1
解决办法
5397
查看次数

打字稿中枚举的意义是什么

打字稿中枚举的用途是什么。如果它的目的只是为了使代码可红,我们就不能为了同样的目的使用常量吗?

enum Color {
Red = 1, Green = 2, Blue = 4
};


let obj1: Color = Color.Red;
obj1 = 100; // does not show any error in IDE while enum should accept some specific values
Run Code Online (Sandbox Code Playgroud)

如果没有typechecking的优势,难道就不能这么写。

const BasicColor = {
    Red: 1,
    Green: 2,
    Blue: 4
};

let obj2 = BasicColor.Red;
Run Code Online (Sandbox Code Playgroud)

typescript

2
推荐指数
1
解决办法
563
查看次数