externとグローバル変数の疑問

前もって言っておくけど解答を示しているわけじゃないです。

C書いてて不思議に思ったので、字面に起こしておこうと思った。externとグローバル変数の使いかたに曖昧さがあると自分で感じた。感じたのは以下のようなコード。

/* test.h */
#ifndef _TEST_H_
#define _TEST_H_

#ifdef __cplusplus
extern "C" {
#endif

#include <stdio.h>

int g;

void set(void);
#ifdef __cplusplus
}
#endif

#endif
#include "test.h"


int extern_g;

int main() {
    g = 0;
    extern_g = 100;
    printf("global variable g is %d\n", g);
    set();
    printf("global variable g is %d\n", g);
    return 0;
}
#include "test.h"

extern int extern_g;

void set() {
    g = 100;
    printf("extern variable extern_g is %d\n", extern_g);
}

gccもエラーにならんしどうなんだろう

externって便利と言えば便利だけどなくても困らなくない?って思った。結局は、動けばいいっていう話だけど。

正しいヘッダファイルの書き方を学ばないとなって思った。