我在我正在使用的第三方库中定义了此代码:
typedef enum {
STATE_INITIAL = 0,
STATE_LOAD = 1,
STATE_READ = 2,
STATE_FINISH = 3
} state_t;
Run Code Online (Sandbox Code Playgroud)
我想重新定义STATE_FINISH的值.但是,我不想搞乱这个库,同时我不能在我的代码中这样做:
#undef STATE_FINISH
#define STATE_FINISH 2
Run Code Online (Sandbox Code Playgroud)
还有另外一种方法吗?
首先,#undef不会产生影响.这只适用于已经#defined的名字.所以你应该把它留下来.
其次,#define STATE_FINISH 2可能会产生你似乎想要的效果.但是,您必须确保在标题为#included的所有情况下始终使用它.否则,程序中用于STATE_FINISH的值将不一致.还必须执行#define 后的#include.如果你以前这样做,它将在头文件中进行替换,这会将enum定义更改为不正确
typedef enum {
STATE_INITIAL = 0,
STATE_LOAD = 1,
STATE_READ = 2,
2 = 3 /* or STATE_READ = 3, for the other variant; also wrong */
} state_t;
Run Code Online (Sandbox Code Playgroud)
现在结合这些关于订单的警告:你无法保证这一点.如果您重新#define使用#include,可能已经使用了头文件中的一些代码,这些代码STATE_FINISH将不会被替换.根据您的需要,这可能是错误的.
接下来,你真的确定要这样做吗?为什么?难道你#define STATE_FINISH STATE_READ不是意味着吗?差异似乎微妙,但是表达你真正的意思.
也许你的意思更像是#define MY_OWN_STATE STATE_READ什么?如果你使用你自己发明的名字来表达国家,那么你就会减少对真正意义的混淆STATE_FINISH.它还表示你不能改变STATE_FINISH库中使用的值(我希望你已经意识到了).
| 归档时间: |
|
| 查看次数: |
905 次 |
| 最近记录: |