據我了解extern
,使變數->全域變數,這意味著我們也可以使另一個函式的變數成為全域變數嗎?
#include <stdio.h>
extern char* name;
void namePrint();
int main(void) {
printf("%s\n", name);
namePrint();
}
void namePrint() {
printf("%s", name);
char* name = "Satyam";
}
uj5u.com熱心網友回復:
你理解外部錯誤。這不是讓符號“全球”。Tells 告訴編譯器存在已在其他地方創建的符號,即當前翻譯單元之外(字面意思是“extern”一詞的意思)。
這有點像在使用它之前宣告一個函式。extern
允許在函式宣告中使用:
// someheader.h
extern void foo(void);
事實上,在語意上,通常的函式都被宣告了,也就是說,沒有使用extern
只是一種簡寫方式。
uj5u.com熱心網友回復:
術語“全域變數”C 程式員是指具有檔案范圍的變數(具有外部或內部鏈接)。
在函式內宣告的變數是區域變數,在宣告它們的函式范圍之外是不可見的。
您可以在函式中宣告一個變數,該變數將使用存盤類說明符 extern 參考檔案范圍內的變數。例如
char* name = "Satyam";
void namePrint();
int main(void) {
printf("%s\n", name);
namePrint();
}
void namePrint() {
extern char* name;
printf("%s\n", name);
}
在函式namePring
中,宣告的變數name
是指name
在檔案范圍內宣告的全域變數。那就是它表示全域變數name
。
或更有意義的例子
char* name = "Satyam";
void namePrint();
int main(void) {
printf("%s\n", name);
namePrint();
}
void namePrint() {
char *name = "Programmer";
printf( "%s ", name );
{
extern char* name;
printf("%s\n", name);
}
}
uj5u.com熱心網友回復:
除了其他答案:
正如您的代碼現在一樣,它可以編譯,但不鏈接。
通過extern char* name;
您告訴編譯器某處存在全域變數name
。編譯器對此很好。
這個功能:
void namePrint() {
printf("%s", name);
char* name = "Satyam";
}
printf()
在呼叫中使用這個全域變數。name
下面一行中區域變數的定義是另一個同名變數。如果之后有一些代碼訪問name
(不是),它會“隱藏”全域變數。
因為您從不定義全域變數name
,所以聯結器無法決議參考。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/470639.html
下一篇:將整數矩陣寫入.txt