7.h:我不明白 「外部」
int a
5.C:
#include"7.h"
#include <stdio.h>
int b;
void way();
void way() {
printf("%p\n",&b);
}
6.C:
#include "7.h"
#include <stdio.h>
void way();
int b;
int main(int argc, char const *argv[])
{
way();
printf("%p\n",&b);
return 0;
}
爲什麼我使用「gcc -std = c90 5.c 6.c」將其成功編譯!
結果是 0x10288b018 0x10288b018
同一地址!!!!!!但我不使用的extern!爲什麼!
但我改變 「6.C」 到:
6.C:
#include "7.h"
#include <stdio.h>
void way();
int b=8;
int main(int argc, char const *argv[])
{
way();
printf("%p\n",&a);
return 0;
}
5.C到:
#include"7.h"
#include <stdio.h>
int b=5;
void way();
void way() {
printf("%p\n",&a);
}
但結果是:
duplicate symbol _b in:
/var/folders/sb/dc6wxwf16kl7k1wrhrxjx5j40000gn/T/5-00d5c1.o
/var/folders/sb/dc6wxwf16kl7k1wrhrxjx5j40000gn/T/6-2b050b.o
ld: 1 duplicate symbol for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
C是一種非常奇怪和奇怪的語言。它有一個「臨時定義」的概念,它確保每個人對變量實際定義的時間都同樣感到困惑。 –
文件'7.h'具有變量定義'int a',這是不好的做法。 –
'int a;'在這種情況下是全局的。 – Stargateur