
uj5u.com熱心網友回復:
重定義為什么不報錯uj5u.com熱心網友回復:
.c 檔案#define _RTC_APP_C_
#include "pch.h"
#include <iostream>
int bbbb; //這里定義了 pch.h也定義了 為什么不報重定義
int main()
{
bbbb = 9999;
std::cout << bbbb;
system("pause");
}
.h檔案
#ifndef PCH_H
#define PCH_H
#ifdef _RTC_APP_C_ //在.c里定義
#define _RTC_APP_E_
#else
#define _RTC_APP_E_ extern
#endif
//為什么這個不會報重定義錯
_RTC_APP_E_ int bbbb;
#endif
uj5u.com熱心網友回復:
因為是extern了uj5u.com熱心網友回復:
extern 沒有生效uj5u.com熱心網友回復:
VS是extern了但是我在KEIL里還是定義uj5u.com熱心網友回復:
沒必要糾結這些 這是編譯器嚴謹的問題 有些編譯器不會包容 有些則會你這個只是重復宣告 你在.h檔案中將bbbb賦值自然會報錯 當然 只能說你這個編譯器不夠嚴謹 包容了這個小問題
uj5u.com熱心網友回復:
作用域不一樣,不是同一個變數,不會抱錯uj5u.com熱心網友回復:
這個extern不是沒有生效嗎?uj5u.com熱心網友回復:
你試一下這樣的代碼都不會報錯int bbb;
int main(){
int bbb;
{
int bbb;
}
}
因為c++變數作用域在他最近的大括號下
uj5u.com熱心網友回復:
加上extern,那就不是定義了,而是宣告。如果全域變數不在檔案的開頭定義,有效的作用范圍將只限于其定義處到檔案結束。如果在定義點之前的函式想參考該全域變數,則應該在參考之前用關鍵字 extern 對該變數作“外部變數宣告”,表示該變數是一個已經定義的外部變數。有了此宣告,就可以從“宣告”處起,合法地使用該外部變數
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/27634.html
標籤:C語言
上一篇:為什么沒有這個設備
