🔴 include guard 生效之后
(本条路线统一用 gcc -std=c11 -O0 编译)同一段内容写了两遍,两遍都带同一个 guard:
#include <stdio.h>
#ifndef ONCE_H
#define ONCE_H
static int marker = 1;
#endif
#ifndef ONCE_H /* 第二次:宏已经定义过了,整段跳过 */
#define ONCE_H
static int marker = 2; /* 没有 guard 的话这里会重复定义 */
#endif
int main(void) {
printf("%d\n", marker);
return 0;
}
全部评论