相关疑难解决方法(0)

"static const"vs"#define"vs"enum"

在C中的以下陈述中哪一个更好用?

static const int var = 5;
Run Code Online (Sandbox Code Playgroud)

要么

#define var 5
Run Code Online (Sandbox Code Playgroud)

要么

enum { var = 5 };
Run Code Online (Sandbox Code Playgroud)

c constants

550
推荐指数
12
解决办法
33万
查看次数

C中枚举的大小是多少?

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

c enums

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

我应该使用#define,enum还是const?

在我正在研究的C++项目中,我有一个标志值,它可以有四个值.这四个标志可以组合在一起.标志描述数据库中的记录,可以是:

  • 新纪录
  • 删除记录
  • 修改记录
  • 现有记录

现在,对于我希望保留此属性的每条记录,我可以使用枚举:

enum { xNew, xDeleted, xModified, xExisting }
Run Code Online (Sandbox Code Playgroud)

但是,在代码的其他地方,我需要选择哪些记录对用户可见,所以我希望能够将其作为单个参数传递,如:

showRecords(xNew | xDeleted);
Run Code Online (Sandbox Code Playgroud)

所以,似乎我有三个可能的附件:

#define X_NEW      0x01
#define X_DELETED  0x02
#define X_MODIFIED 0x04
#define X_EXISTING 0x08
Run Code Online (Sandbox Code Playgroud)

要么

typedef enum { xNew = 1, xDeleted, xModified = 4, xExisting = 8 } RecordType;
Run Code Online (Sandbox Code Playgroud)

要么

namespace RecordType {
    static const uint8 xNew = 1;
    static const uint8 xDeleted = 2;
    static const uint8 xModified = 4;
    static const uint8 xExisting = 8;
}
Run Code Online (Sandbox Code Playgroud)

空间要求很重要(字节与整数),但并不重要.使用定义我失去了类型安全性,并且enum我失去了一些空间(整数),并且当我想要进行按位操作时可能需要进行转换.随着 …

c++ enums bit-manipulation c-preprocessor

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

是什么让C,宏或枚举更好?

我很困惑何时使用宏或枚举.两者都可以用作常量,但它们之间有什么区别,哪一个有什么优势?它是否与编译器级别有关?

c macros enums

34
推荐指数
5
解决办法
2万
查看次数

static const vs. c ++中的#define - 可执行文件大小的差异

我的基本情况:我有一个类似的包含文件#define foo (Flag1 | Flags2 | Flag3),所以它是一个预定义的位标志组合.为了类型安全,我想用静态consts替换这些#defines,即static const int foo = (Flag1 | Flag2 | Flag3)(或类似).这个包含文件包含在程序的许多地方.

现在当我在启用所有相关优化选项的发布版本时(使用VS2010的C++编译器),替换#defines似乎会将可执行文件增加几个KiB,具体取决于我替换了多少常量.

为什么会这样?据我所知,整数常量应该被"内联"到尽可能产生的ASM代码中,我不知道使用static constvs #define会如何在这里产生影响.很明显,变量没有内联,因为反汇编显示:

#define:
01325041  or          eax,0FFD87FE0h
static int:
011E5451  or          eax,dword ptr [CMainFrame::s_TemplateModulePaths+38h (151F008h)]
Run Code Online (Sandbox Code Playgroud)

所以最后一个问题是:我如何避免#define但仍然依赖于直接插入到生成的程序集中的变量?

c++ constants

9
推荐指数
1
解决办法
2011
查看次数

Enum如何在C上分配内存?

我正在尝试使用C和汇编(intelx8086)语言.

我也在使用一个班级,我的一个朋友给了我一个

typedef enum data_10 {a=0,b=7,c=10,} data_10_type;
Run Code Online (Sandbox Code Playgroud)

我想按位使用这个类(AKA构造它/在Assembly上销毁它).我的问题是,"枚举"需要多少内存?

c assembly enums

6
推荐指数
2
解决办法
7924
查看次数

标签 统计

c ×4

enums ×4

c++ ×2

constants ×2

assembly ×1

bit-manipulation ×1

c-preprocessor ×1

macros ×1