第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

關(guān)于暫定定義

關(guān)于暫定定義

C C++
哈士奇WWW 2019-07-12 10:38:10
關(guān)于暫定定義我從一本關(guān)于暫定定義的書中讀到,暫定定義是沒有存儲類說明符和初始化器的任何外部數(shù)據(jù)聲明。如果到達(dá)翻譯單元的末尾,并且沒有出現(xiàn)帶有標(biāo)識符初始化器的定義,則暫定定義將成為完整的定義。請解釋上述聲明的含義。另外,宣言和定義之間的區(qū)別是什么?因為這件事我搞混了。:(為什么這個程序沒有給出一個錯誤:#include <stdio.h>int a;       //Tentative definitionint a;       //similarly this declaration too.int main()   //not getting any error with this code why its so?{     printf("hi");}此外,這個代碼有什么問題:#include<stdio.h>printf("Hi");int main(void){     return 0;}
查看完整描述

3 回答

?
阿晨1998

TA貢獻(xiàn)2037條經(jīng)驗 獲得超6個贊

不,這在C中不違法.在您鏈接到的問題(以及鏈接到的答案的問題)中涉及多個文件。同一文件中的多個(兼容)暫定定義并不違反。這一問題的違反是因為,在翻譯單位的末尾,如果有沒有完全定義的暫定定義,就意味著一個完整的定義。這加上多個文件會導(dǎo)致鏈接時產(chǎn)生多個定義(除了跨多個文件的暫定定義規(guī)則的公共擴(kuò)展外)

查看完整回答
反對 回復(fù) 2019-07-12
?
慕勒3428872

TA貢獻(xiàn)1848條經(jīng)驗 獲得超6個贊

變量聲明表示,“程序中有一個具有以下名稱和類型的變量”。

變量定義“親愛的Compiler先生,現(xiàn)在請為一個變量分配內(nèi)存,其名稱和類型如下?!?/trans>

因此,對于同一個變量可以有多個聲明,但是應(yīng)該只有一個定義。

在C中,純聲明(也不是定義)前面有關(guān)鍵字extern..因此,由于在第一個示例中沒有這個關(guān)鍵字,所以有兩個定義。表面上看,這似乎是一個問題(實際上是C+中的一個錯誤),但是C有一個特殊的“暫定定義”規(guī)則,它允許對同一個變量進(jìn)行多個定義,只要它們都匹配,最多有一個初始化器。C編譯器在幕后將所有暫定定義合并到一個定義中。

如果您試圖初始化這兩個定義,如下所示:

int a = 1;int a = 2;

那你就犯了個錯誤。

你的第二個問題更直截了當(dāng)。在C中,您不能在函數(shù)正文之外有可執(zhí)行語句。這是不允許的。想想看:如果允許的話,你希望它什么時候運(yùn)行?


查看完整回答
反對 回復(fù) 2019-07-12
?
慕絲7291255

TA貢獻(xiàn)1859條經(jīng)驗 獲得超6個贊

第一種方法之所以有效,是因為您對a都是試探性的,只要你認(rèn)為合適,就可以經(jīng)常重復(fù)。在翻譯單元的末尾,還沒有看到非暫定的定義,因此您為屬性指定的內(nèi)容與默認(rèn)設(shè)置相結(jié)合,從而給出了a,因此它將具有外部鏈接、靜態(tài)存儲持續(xù)時間,并被初始化為0。

第二個問題與暫定定義無關(guān)。你的printf("Hi");需要在一個函數(shù)中工作-它不是一個聲明或定義(試探性的或其他的);它只是不允許的。


查看完整回答
反對 回復(fù) 2019-07-12
  • 3 回答
  • 0 關(guān)注
  • 489 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號