我是新來的extern的概念。今天在工作中,我遇到了大量在頭文件中聲明的extern函數; foo.h.在一些文件夾中,我找到了一個foo.c文件,其中包含了所述函數的定義,但它不包含#include foo.h
。當我回到家時,我決定玩弄外部存儲類的例子。在讀完「C書」後,我想到了這一點。爲什麼我需要聲明這個函數extern。它沒有它的作品
這是我不期望工作。但它的確如此。
的main.c
#include <stdio.h>
int data;
int main()
{
data = 6;
printf("%d\n", getData());
data = 8;
printf("%d\n", getData());
return 0;
}
externs.c
int getData()
{
extern int data;
return data;
}
慶典
gcc main.c externs.c -o externs
我不認爲這會工作b因爲該功能在技術上並非在main之前定義的(或者至少是冗長的)。這是否工作,因爲int getData()
的默認存儲類是extern
?如果是這樣,爲什麼即使打擾下面的例子(類似於我在工作中看到的)?
main2.c
#include <stdio.h>
#include "externs.h"
int data;
int main()
{
data = 6;
printf("%d\n", getData());
data = 8;
printf("%d\n", getData());
return 0;
}
externs.h
#ifndef _EXTERNSH_
#define _EXTERNSH_
extern int getData();
#endif
externs.c
int getData()
{
extern int data;
return data;
}
個慶典
gcc main2.c externs.c -o externs
您可以在每種情況下添加或評論輸出嗎? – Grantly