在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) 我正在创建一组枚举值,但我需要每个枚举值为64位宽.如果我没记错的话,枚举通常与int的大小相同; 但是我认为我读过某个地方(至少在GCC中),编译器可以使枚举成为保持其值所需的任何宽度.那么,有可能有一个64位宽的枚举?
socket.h我的Linux系统上的一个标题如下所示.
/* Bits in the FLAGS argument to `send', `recv', et al. */
enum
{
MSG_OOB = 0x01, /* Process out-of-band data. */
#define MSG_OOB MSG_OOB
MSG_PEEK = 0x02, /* Peek at incoming messages. */
#define MSG_PEEK MSG_PEEK
MSG_DONTROUTE = 0x04, /* Don't use local routing. */
#define MSG_DONTROUTE MSG_DONTROUTE
...
Run Code Online (Sandbox Code Playgroud)
定义一种用于在C中创建type-safe-ish常量enum的习惯用法,该语言实际上将其视为编译时常量.
我的问题是:宏定义什么目的MSG_OOB,MSG_PEEK...展开自己服务?
最近,在这个问题中,我看到一个用于定义单个值的枚举.例如:
enum { BITS_PER_WORD = 32 };
Run Code Online (Sandbox Code Playgroud)
代替:
#define BITS_PER_WORD 32
Run Code Online (Sandbox Code Playgroud)
假设以后不会添加更多成员,那么这样做的好处是什么?(或者这是个人品味的问题)
换句话说,如果我有使用one-off int定义的现有代码,是否有任何理由改变上面显示的一次性枚举?
出于好奇,我将GCC的优化汇编程序输出与一些非平凡的代码进行了比较,结果在枚举/定义之间保持不变.
我读过有关该主题的几个问题:
我知道在宏上通常首选#define枚举,以获得更好的封装和/或可读性。另外,它允许编译器检查类型以防止出现某些错误。
const声明介于两者之间,允许类型检查和封装,但更混乱。
现在我在内存空间非常有限的嵌入式应用程序中工作(我们经常必须争取字节节省)。我的第一个想法是常量比枚举占用更多的内存。但我意识到我不确定常数将如何出现在最终固件中。
例子:
enum { standby, starting, active, stoping } state;
Run Code Online (Sandbox Code Playgroud)
在资源有限的环境中,enumVS#define与 VSstatic const在执行速度和内存占用方面如何比较?