cmark的main.c中的 CLI 在|=
迭代参数时使用运算符来组合开/关选项。简化版本如下所示:
#define CMARK_OPT_DEFAULT 0
#define CMARK_OPT_SOURCEPOS 1
#define CMARK_OPT_HARDBREAKS 2
#define CMARK_OPT_NORMALIZE 4
#define CMARK_OPT_SMART 8
int options = CMARK_OPT_DEFAULT;
for (i = 1; i < argc; i++) {
if (strcmp(argv[i], "--sourcepos") == 0) {
options |= CMARK_OPT_SOURCEPOS;
} else if (strcmp(argv[i], "--hardbreaks") == 0) {
options |= CMARK_OPT_HARDBREAKS;
} else if (strcmp(argv[i], "--smart") == 0) {
options |= CMARK_OPT_SMART;
} else if (strcmp(argv[i], "--normalize") == 0) {
options |= CMARK_OPT_NORMALIZE;
}
...
}
使用|=
而不是+=
添加选项有什么好处?