2010-12-07 71 views
0

可能顯示的文件:
Is this a legitimate C++ code?
「C subset of C++」 -> Where not ? examples ?一段代碼,用gcc編譯,但不克++

任何人可以想出一段代碼,用gcc或任何其他編譯C編譯器,並且不編譯g ++或任何其他C++編譯器?

更新: 我不是說只是關鍵字

UPDATE2: 謝謝大家的答案。顯然,版主們比我對C和C++之間細微的差異沒那麼熱情。

UPDATE3: 給主持人:你可以將它與我之前關於主題的問題合併,如你所建議的那樣?將這兩個問題放在一起非常合理。

+2

不,你自己做作業 – Falmarri 2010-12-07 00:32:11

+0

也許它看起來像,但事實並非如此。這是我剛剛問過的一個問題的自然延續 – matcheek 2010-12-07 00:35:06

+0

這是一個騙局。已經問過。 – 2010-12-07 00:36:15

回答

8
#include <stdlib.h> 

int main() 
{ 
    char* s = malloc(128); 
    return 0; 
} 

這將用gcc編譯,但不與G ++。 C++在這裏需要從void*明確投射,而C不需要。

4
int main(int argc, char **class) 
{ 
    return !argc; 
} 

編輯:另一個例子

int foo(); 
int main(void) { 
    return foo(42); 
} 
int foo(int bar) { 
    return bar - 42; 
} 
3

嘗試

extern int getSize(); 

int main() 
{ 
    char x[getSize()]; 
    x[0] = 0; 
} 

int getSize() 
{ 
    return 4; 
} 

記得有嚴格的標誌進行編譯。

> gcc -pedantic -std=c99 t.c 
> g++ -pedantic t.c 
t.c: In function `int main()': 
t.c:6: error: ISO C++ forbids variable length array `x' 
2

如何

 
/* Within a function */ 
{ 
    enum {foo} bar; 
    bar++; 
} 

這似乎在C++的設計提供了相當大的重大更改,但它是什麼。

1

void*指針算術:

void* t; 
t++; // compiles only in gcc 
2

什麼字符大小:
更糟糕的是,它編譯,但在運行時會產生不同的輸出。

#include <stdio.h> 

int main() 
{ 
    fprintf(stdout, "%s\n", (sizeof('\xFF') == sizeof(char))?"OK":"Fail"); 
} 

> gcc -pedantic t.c 
> ./a.exe 
Fail 
> g++ -pedantic t.c 
> ./a.exe 
OK 

這實際上讓我們想知道爲什麼這會起作用?

fprintf(stdout, "%c%c\n", 'A', 'B'); 

即使對象的大小不同,它也適用於兩種編譯器。