在探索用于学习目的的SQLite源代码时,我在源代码中的许多地方都发现了这一点;
#define SQLITE_LOCK_NONE 0
#define SQLITE_LOCK_SHARED 1
#define SQLITE_LOCK_RESERVED 2
#define SQLITE_LOCK_PENDING 3
#define SQLITE_LOCK_EXCLUSIVE 4
#define SQLITE_IOCAP_ATOMIC 0x00000001
#define SQLITE_IOCAP_ATOMIC512 0x00000002
#define SQLITE_IOCAP_ATOMIC1K 0x00000004
#define SQLITE_IOCAP_ATOMIC2K 0x00000008
#define SQLITE_IOCAP_ATOMIC4K 0x00000010
这是现代C ++(C ++ 11,14,17)中的标准,还是在现代C ++中有不同的方法?
答案 0 :(得分:1)
据我所知,从来没有理由在C ++中使用#define
作为常量。你总是可以写
const int my_constant = 42;
对于你的情况,你可能想要一个枚举
enum SQLITE_LOCK {SQLITE_LOCK_NONE, SQLITE_LOCK_SHARED, SQLITE_LOCK_RESERVED,
SQLITE_LOCK_PENDING, SQLITE_LOCK_EXCLUSIVE };
这是c ++ 11中真正改进的东西,因为你现在可以使用作用域的枚举
enum class SQLITE_LOCK { .... };
PS:现代C ++对编译时常量也有constexpr
,但我不熟悉它。