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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

以每種語言編譯時(shí),在C和C ++中都有效的代碼能否產(chǎn)生不同的行為?

以每種語言編譯時(shí),在C和C ++中都有效的代碼能否產(chǎn)生不同的行為?

C++ C
慕田峪9158850 2019-12-07 13:38:26
C和C ++有很多區(qū)別,并非所有有效的C代碼都是有效的C ++代碼。(“有效”是指具有定義行為的標(biāo)準(zhǔn)代碼,即不是特定于實(shí)現(xiàn)的/未定義的等。)在任何情況下,使用每種語言的標(biāo)準(zhǔn)編譯器進(jìn)行編譯時(shí),在C和C ++中都有效的一段代碼會(huì)產(chǎn)生不同的行為嗎?為了使其成為合理/有用的比較(我試圖學(xué)習(xí)一些實(shí)用的東西,而不是試圖在問題中發(fā)現(xiàn)明顯的漏洞),我們假設(shè):與預(yù)處理器無關(guān)(這意味著不會(huì)與#ifdef __cplusplus,編譯指示等發(fā)生沖突)實(shí)現(xiàn)定義的任何內(nèi)容在兩種語言中都是相同的(例如,數(shù)值限制等)我們正在比較每個(gè)標(biāo)準(zhǔn)的合理最新版本(例如C ++ 98和C90或更高版本)。如果版本很重要,請(qǐng)說明每個(gè)標(biāo)準(zhǔn)的哪個(gè)版本會(huì)產(chǎn)生不同的行為。
查看完整描述

3 回答

?
人到中年有點(diǎn)甜

TA貢獻(xiàn)1895條經(jīng)驗(yàn) 獲得超7個(gè)贊

以下內(nèi)容(在C和C ++中有效)將(很可能)i在C和C ++中導(dǎo)致不同的值:


int i = sizeof('a');

有關(guān)差異的說明,請(qǐng)參見C / C ++中的字符大?。?#39;a')。


本文中的另一個(gè):


#include <stdio.h>


int  sz = 80;


int main(void)

{

    struct sz { char c; };


    int val = sizeof(sz);      // sizeof(int) in C,

                               // sizeof(struct sz) in C++

    printf("%d\n", val);

    return 0;


查看完整回答
反對(duì) 回復(fù) 2019-12-07
?
慕尼黑8549860

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超11個(gè)贊

這是一個(gè)利用C和C ++中的函數(shù)調(diào)用和對(duì)象聲明之間的區(qū)別以及C90允許調(diào)用未聲明函數(shù)的事實(shí)的示例:


#include <stdio.h>


struct f { int x; };


int main() {

    f();

}


int f() {

    return printf("hello");

}

在C ++中,由于f創(chuàng)建和銷毀了一個(gè)臨時(shí)文件,因此不會(huì)打印任何內(nèi)容,但在C90中,hello由于可以在不聲明函數(shù)的情況下調(diào)用函數(shù),因此不會(huì)打印任何內(nèi)容。


如果您想知道該名稱f是否被兩次使用,則C和C ++標(biāo)準(zhǔn)明確允許這樣做,并且要?jiǎng)?chuàng)建一個(gè)對(duì)象,您必須說清楚struct f是否要使用結(jié)構(gòu),或者struct要取消使用要使用的功能。


查看完整回答
反對(duì) 回復(fù) 2019-12-07
?
GCT1015

TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超4個(gè)贊

對(duì)于C ++和C90,至少存在一種獲得未定義實(shí)現(xiàn)的不同行為的方法。C90沒有單行注釋。稍加注意,我們就可以使用它來創(chuàng)建一個(gè)在C90和C ++中具有完全不同結(jié)果的表達(dá)式。


int a = 10 //* comment */ 2 

        + 3;

在C ++中,從//到行尾的所有內(nèi)容均為注釋,因此其結(jié)果如下:


int a = 10 + 3;

由于C90沒有單行注釋,因此只有/* comment */是注釋。第一部分/和2都是初始化的一部分,因此得出:


int a = 10 / 2 + 3;

因此,一個(gè)正確的C ++編譯器將提供13,但一個(gè)完全正確的C90編譯器將給8。當(dāng)然,我在這里選擇了任意數(shù)字-您可以視需要使用其他數(shù)字。


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

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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