3 回答

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;

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要取消使用要使用的功能。

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ù)字。
- 3 回答
- 0 關(guān)注
- 530 瀏覽
添加回答
舉報(bào)