2010-12-07 5 views
0

Doublons possibles:
Is this a legitimate C++ code?
“C subset of C++” -> Where not ? examples ?morceau de code qui compile avec gcc mais pas g ++

tout le monde pouvait venir avec un morceau de code qui compile avec gcc ou tout autre C compilateur, et ne compile pas g ++ ou tout autre compilateur C++?

MISE À JOUR: Je ne veux pas uniquement des mots clés

MAJ2: Merci à tous pour trouver des réponses. Apparemment, les modérateurs étaient moins enthousiastes que moi sur les différences subtiles entre C et C++.

UPDATE3: aux modérateurs: pourriez-vous le fusionner avec ma question précédente sur le sujet, comme vous l'avez suggéré? Il est parfaitement logique de garder ces deux questions ensemble.

+2

Non, faites vos devoirs – Falmarri

+0

peut-être que ça ressemble, mais ce n'est pas le cas. C'est la suite naturelle d'une question que je viens de poser. – matcheek

+0

C'est une dupe. Demandé déjà. –

Répondre

8
#include <stdlib.h> 

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

Cela va compiler avec gcc, mais pas avec g ++. C++ requiert une distribution explicite de void* ici, contrairement à C.

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

Edit: un autre exemple

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

OK le mot-clé classe, mais si nous oublions les mots-clés sur les mots-clés? – matcheek

+0

prototypes de fonctions manquantes – pmg

3

Essayez

extern int getSize(); 

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

int getSize() 
{ 
    return 4; 
} 

Souvenez-vous de compiler avec les drapeaux stricts.

> 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

Que diriez-vous

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

Cela semble un assez grand changement de rupture dans la conception de C++, mais il est ce qu'il est.

1

Arithmétique pointeur sur void*:

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

Qu'en est-il taille des caractères:
Pire encore est qu'il compile mais produit un résultat différent lors de l'exécution.

#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 

Cela nous amène à nous demander pourquoi cela fonctionne?

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

Cela fonctionne sur les deux compilateurs même si la taille des objets est différente.

+1

fonctionne parce que tous les "petits" types entiers sont promus à int dans tous les cas lorsqu'ils sont passés à une fonction varag. –

+0

@Jens Gustedt: Merci. –

Questions connexes