C ISO et C++ ISO

C ISO et C++ ISO - Divers - Programmation

Marsh Posté le 25-07-2007 à 21:42:07    

Bonjour à tous,  
 
petite question que je me pose depuis longtemps et j'aimerai bien avoir un début de réponse cohérent, et justifié (et non pas de guerres).
 
Je suis un developeur C ANSI de base, avec du C++ qui est venu par la suite (comme tant d'autres ici je pense). Hors le C a évolué avec le C ISO, qui inclut les objets et tant d'autres choses. Avant je voyais le C++ comme l'évolution du C ANSI, mais avec le C ISO qui continue aussi d'évoluer ce n'est pas vrai.
 
Donc je me demande, quelles différences majeurs entre les deux? pourquoi l'un et pas l'autre ? (je n'ai jamais vu d'offres pro de projet objet en C, est-ce trop 'jeune' ?).
 
 
Merci pour toute réponse ou redirection
 
 
:jap:


---------------
"Phildar t'es vraiment une pute pas finie toi! Et Manu le gros porc arrete de t'marrer!"
Reply

Marsh Posté le 25-07-2007 à 21:42:07   

Reply

Marsh Posté le 26-07-2007 à 20:12:48    

[:augie]


---------------
"Phildar t'es vraiment une pute pas finie toi! Et Manu le gros porc arrete de t'marrer!"
Reply

Marsh Posté le 26-07-2007 à 21:02:31    

Le C et le C++ sont deux langages distincts et donc, par conséquent, ils évoluent chacun de leur côté, indépendamment l'un de l'autre.
http://david.tribble.com/text/cdiffs.htm

Reply

Marsh Posté le 26-07-2007 à 21:11:44    

Un site qui a l'air très intéressant, merci bien.
 
Ca devrait répondre à la plupart de mes questions je pense. Sauf le fait que personne ne fait du C object j'ai l'impression.


---------------
"Phildar t'es vraiment une pute pas finie toi! Et Manu le gros porc arrete de t'marrer!"
Reply

Marsh Posté le 26-07-2007 à 21:19:16    

Aussi, au risque de poser une question très stupide :
 
Le C++ par rapport au C, au niveau compilateur, qu'est-ce?
Est-ce que les ajouts du C++ sont essentiellement des headers C + des macros avec tout de même de grosses optimisations du compilateur (un peu comme LaTeX pour TeX, mais on va me traiter de fou pour cette comparaison ;) ), ou bien tout est dans le compilateur?
 
Merci


---------------
"Phildar t'es vraiment une pute pas finie toi! Et Manu le gros porc arrete de t'marrer!"
Reply

Marsh Posté le 26-07-2007 à 21:27:22    

"C object" ?! [:quardelitre dei]  
Euuuh... keskesséksetruc ? [:ummon]
 
Pour le C++, ce n'est pas un "C avec des trucs ajoutés dedans". C'est un vrai langage, à part, différent du C. Donc y a pas de macro "pour que le C soit objet", ou autre hérésie de ce genre.  
 
Pour le compilateur, y en a un par langage : gcc/g++, cc/CC, etc.

Reply

Marsh Posté le 26-07-2007 à 21:32:35    

1- Rooh j'avais cru que le C ISO99 apportait l'objet, mais en fait pas trouvé donc probablement pas.
 
2- Ok
 
Merci


---------------
"Phildar t'es vraiment une pute pas finie toi! Et Manu le gros porc arrete de t'marrer!"
Reply

Marsh Posté le 27-07-2007 à 00:32:38    

comme déjà dit, ce sont deux langages différents, le C++ ayant de manière standard la capacité de linker avec du C.
 
Après, si on trouve des compilateurs capable de compiler les deux, ce parce que ça ne sert à rien de faire 36x le même travail. En gros, GCC est une collection, donc tu as plusieurs parties avant qui transforment du charabia en langage intermédiaire, que la partie arrière unique peut optimiser et traduire en binaire machine.

Reply

Marsh Posté le 27-07-2007 à 00:52:09    

Merci pour les précisions, c'est très intéressant. Je vais commencer à m'intéresser un peu plus au fonctionnement des compilateurs je pense, pour mieux comprendre ce que je code... (j'ai fait un OS mais je ne vais probablement pas faire de compilo, le travail serait énorme j'imagine ;) )

 

(quelque part, quand j'ai vu que tu m'avais répondu et avec la qualité de ma question et tes réponses habituelles aux newbs sur OSA je m'attendais à bien pire ^_^).

 

:jap:

Message cité 1 fois
Message édité par gee le 27-07-2007 à 00:52:47

---------------
"Phildar t'es vraiment une pute pas finie toi! Et Manu le gros porc arrete de t'marrer!"
Reply

Marsh Posté le 27-07-2007 à 01:06:53    

gee a écrit :

Merci pour les précisions, c'est très intéressant. Je vais commencer à m'intéresser un peu plus au fonctionnement des compilateurs je pense, pour mieux comprendre ce que je code... (j'ai fait un OS mais je ne vais probablement pas faire de compilo, le travail serait énorme j'imagine ;) )
 
(quelque part, quand j'ai vu que tu m'avais répondu et avec la qualité de ma question et tes réponses habituelles aux newbs sur OSA je m'attendais à bien pire ^_^).


 
Flex et bison (ou lex et yacc, suivant les gouts)... tu vas aimer...

Reply

Marsh Posté le 27-07-2007 à 01:06:53   

Reply

Marsh Posté le 27-07-2007 à 01:12:43    

déjà fait du lex et yacc :)
(et déjà fait mon propre parser pour mon propre langage ;) )


---------------
"Phildar t'es vraiment une pute pas finie toi! Et Manu le gros porc arrete de t'marrer!"
Reply

Marsh Posté le 27-07-2007 à 01:26:21    

Bah voila, c'est ca, ni plus ni moins. Ca traduit un langage "humain" (C, C++ et co). Suivant les langages, ca fait du bytecode ou du langage machine.

 

Amha, le plus chaud dans un compilateur, c'est la gestion des optimisations (machines et programmes dépendantes). Dans certains coins, ca doit pas être trivial, en plus des bugs d'archi.


Message édité par Gf4x3443 le 27-07-2007 à 01:26:49
Reply

Marsh Posté le 27-07-2007 à 01:29:51    

oui mais je parlais d'un compilateur donc avec binaire, pas juste d'un parseur de script c'est là qu'est la partie difficile j'imagine.


---------------
"Phildar t'es vraiment une pute pas finie toi! Et Manu le gros porc arrete de t'marrer!"
Reply

Marsh Posté le 27-07-2007 à 02:44:29    

Dans "binaire", ca inclut bytecode ou pas?

Reply

Marsh Posté le 27-07-2007 à 03:34:39    

oui


---------------
"Phildar t'es vraiment une pute pas finie toi! Et Manu le gros porc arrete de t'marrer!"
Reply

Marsh Posté le 26-10-2007 à 18:09:29    

Tiens une question qu'on m'a posé en entretien et qui m'interesse aussi.
 
En supposant qu'on utilise le même code (donc exit l'OOP) vaut-il mieux faire du C ou du C++? En gros quel compilateur pour du code C 'basic' est le plus intéressant j'imagine. AMHA ca ne change rien mais je peux me tromper.


---------------
"Phildar t'es vraiment une pute pas finie toi! Et Manu le gros porc arrete de t'marrer!"
Reply

Marsh Posté le 26-10-2007 à 18:13:02    

gee a écrit :

Tiens une question qu'on m'a posé en entretien et qui m'interesse aussi.
 
En supposant qu'on utilise le même code (donc exit l'OOP) vaut-il mieux faire du C ou du C++? En gros quel compilateur pour du code C 'basic' est le plus intéressant j'imagine. AMHA ca ne change rien mais je peux me tromper.


Sauf qu'un code C s'il arrive à compiler en C++ ne fournit pas obligatoire le même résultat.
Niveau performance, aucune différence.

Reply

Marsh Posté le 26-10-2007 à 18:23:22    

Ooh car les conventions ont pu changer entre les deux?
 
Ok merci bien.


---------------
"Phildar t'es vraiment une pute pas finie toi! Et Manu le gros porc arrete de t'marrer!"
Reply

Marsh Posté le 26-10-2007 à 18:27:33    

gee a écrit :

Ooh car les conventions ont pu changer entre les deux?
 
Ok merci bien.


puisque que ce ne sont pas les mêmes langages et que C++ permet de compiler un sous-ensemble du C, avec quelques différences sémantiques...

Reply

Marsh Posté le 26-10-2007 à 18:28:47    

ok c'est bien ce que je pensais, mais j'imagine qu'en général ca doit pas trop s'éloigner.
 
:jap:  
 
(si tu peux venir sur mon topic en cat C ca m'interesse fortement :ange: )


---------------
"Phildar t'es vraiment une pute pas finie toi! Et Manu le gros porc arrete de t'marrer!"
Reply

Marsh Posté le 26-10-2007 à 18:31:28    

bah besoin que ça s'éloigne pour tout défoncer.
sizeof 'a' c'est le plus simple exemple.

Reply

Marsh Posté le 26-10-2007 à 18:33:57    

hmm?c'est à dire, sizeof ne renvoie pas la même chose?


---------------
"Phildar t'es vraiment une pute pas finie toi! Et Manu le gros porc arrete de t'marrer!"
Reply

Marsh Posté le 26-10-2007 à 18:36:04    

takakompilai

Reply

Marsh Posté le 26-10-2007 à 18:38:15    

ok je regarderai cela plus tard merci :)
Pour l'instant mon autre soucis a la priorité :)


---------------
"Phildar t'es vraiment une pute pas finie toi! Et Manu le gros porc arrete de t'marrer!"
Reply

Marsh Posté le 08-11-2007 à 22:20:36    

je reviens sur le sizeof mon ami Taz.
 
Pourquoi sizeof(monarray) ne me donne pas la même taille suivant que monarray a été déclaré en statique ou en dynamique? Je ne comprend pas trop la subtilité :(


---------------
"Phildar t'es vraiment une pute pas finie toi! Et Manu le gros porc arrete de t'marrer!"
Reply

Marsh Posté le 09-11-2007 à 11:14:34    

Déjà c'est "sizeof variable" et "sizeof(Type)".
Ensuite ça ne fait aucune différence
 

Code :
  1. #include <stdio.h>
  2. int main()
  3. {
  4.         typedef char Array[5];
  5.         Array a;
  6.         Array *b;
  7.         printf("sizeof a = %lu\n", (unsigned long)sizeof a);
  8.         printf("sizeof *b = %lu\n", (unsigned long)sizeof *b);
  9.         return 0;
  10. }

non ?

Reply

Marsh Posté le 09-11-2007 à 17:00:51    

hmm je regarderai cela au travail mais quand je voulais calculer la taille d'un tableau avec sizeof(variable)/sizeof(*variable) ca ne fonctionnait qu'avec un tableau 'statique' avec un dynamique ca donnait 1 d'où ma question.
 
Merci


---------------
"Phildar t'es vraiment une pute pas finie toi! Et Manu le gros porc arrete de t'marrer!"
Reply

Marsh Posté le 09-11-2007 à 17:40:41    

ça n'existe pas les tableaux dynamiques. Un tableau a une taille statique connue à la compilation (sans parler de C99).

Reply

Marsh Posté le 09-11-2007 à 18:32:50    

int *i = new int[10];
 
comment tu trouves la taille de ce truc?


---------------
"Phildar t'es vraiment une pute pas finie toi! Et Manu le gros porc arrete de t'marrer!"
Reply

Marsh Posté le 09-11-2007 à 18:43:58    

gee a écrit :

int *i = new int[10];
 
comment tu trouves la taille de ce truc?


 
Tu ne peux pas, c'est de l'allocation dynamique. Ou alors, tourne toi vers des langages avec un runtime complet (genre java, python, C#...).
 
Ou utiliser des objets fournis par certains toolkits, qui font ca très bien. Ou utiliser d'autres objets C++, genre string, vectors.
 
Ou utiliser tes propres objets, qui auront une propriété qui retournera leur taille.
 
Amha, cette situation, c'est une aberration du C++ qui a voulu rester proche du C en laissant de tels écueils.

Reply

Marsh Posté le 09-11-2007 à 19:56:34    

Mais c'est ridicule. Quand je fais un delete, il doit bien savoir la taille a désaloué non?


---------------
"Phildar t'es vraiment une pute pas finie toi! Et Manu le gros porc arrete de t'marrer!"
Reply

Marsh Posté le 09-11-2007 à 20:47:24    

gee a écrit :

Mais c'est ridicule. Quand je fais un delete, il doit bien savoir la taille a désaloué non?

Oui mais le langage n'offre aucun outil pour la recuperer, car ca n'aurait pas de sens ... vu que y'a pas de tableau dans l'histoire, mais juste un pointeur.

Reply

Marsh Posté le 09-11-2007 à 20:49:56    

bah y'a bien un outil pour retrouver la mémoire allouée à ce pointeur non?
Il y a longtemps j'avais un peu codé autour de malloc, et je crois bien qu'au bloc mémoire d'avant ou truc du genre tu as la taille totale allouée.
 
Bref quand je récupère un tableau, si je ne sais pas d'où il vient, aucun moyen d'avoir la taille?


---------------
"Phildar t'es vraiment une pute pas finie toi! Et Manu le gros porc arrete de t'marrer!"
Reply

Marsh Posté le 09-11-2007 à 21:03:56    

gee a écrit :

bah y'a bien un outil pour retrouver la mémoire allouée à ce pointeur non?
Il y a longtemps j'avais un peu codé autour de malloc, et je crois bien qu'au bloc mémoire d'avant ou truc du genre tu as la taille totale allouée.
 
Bref quand je récupère un tableau, si je ne sais pas d'où il vient, aucun moyen d'avoir la taille?


Mais on recupere jamais de tableau justement! On recupere uniquement un pointeur, qui peut pointer aussi bien vers une variable, que vers le 13 element d'un tableau C,  ou le milieu d'une zone memoire allouee via malloc... t'as aucune maniere fiable de savoir d'ou ca vient.

Reply

Marsh Posté le 09-11-2007 à 23:41:43    

Bah c'est naze je trouve :(


---------------
"Phildar t'es vraiment une pute pas finie toi! Et Manu le gros porc arrete de t'marrer!"
Reply

Marsh Posté le 09-11-2007 à 23:56:06    

C'est le kernel (ou la lib qui contient malloc, qui demande au kernel de la mémoire via brk()/sbrk() sous Unix) qui sait combien d'octet il alloue quand tu fais un appel a malloc() (new n'est qu'un "wrapper" vers malloc, avec support des arguments pour les constructeurs).

 

Théoriquement, il n'est pas impossible de retrouver cette taille, en pratique rien de standard n'existe. Tu es censé savoir ce que tu alloues :)

 

Sinon, du C objet, y'en a plein qui en font. Par exemple, GTK est écrit en C et complètement orienté objet. Mais c'est à vomir, certes :D

Message cité 1 fois
Message édité par deather2 le 09-11-2007 à 23:57:19
Reply

Marsh Posté le 10-11-2007 à 00:05:38    

gee a écrit :

Bah c'est naze je trouve :(

Bienvenue dans le monde des langages de bas-niveau, petit scarabe.

Reply

Marsh Posté le 10-11-2007 à 01:01:30    

deather2 a écrit :

C'est le kernel (ou la lib qui contient malloc, qui demande au kernel de la mémoire via brk()/sbrk() sous Unix) qui sait combien d'octet il alloue quand tu fais un appel a malloc() (new n'est qu'un "wrapper" vers malloc, avec support des arguments pour les constructeurs).
 
Théoriquement, il n'est pas impossible de retrouver cette taille, en pratique rien de standard n'existe. Tu es censé savoir ce que tu alloues :)
 
Sinon, du C objet, y'en a plein qui en font. Par exemple, GTK est écrit en C et complètement orienté objet. Mais c'est à vomir, certes :D


 
Ok c'est bon à savoir merci.
 

Ace17 a écrit :

Bienvenue dans le monde des langages de bas-niveau, petit scarabe.


 
 :kaola:


---------------
"Phildar t'es vraiment une pute pas finie toi! Et Manu le gros porc arrete de t'marrer!"
Reply

Marsh Posté le 10-11-2007 à 02:37:56    

gee a écrit :

Bah c'est naze je trouve :(

 

Pas vraiment. Certes, le noyau sait ce qu'il a alloué, mais s'il fallait obtenir cette information ensuite, cela devrait passer par un appel système. Ce qui implique deux changements de contexte, pour une information qui est déjà disponible en userland (vu que tu as fait toi meme le malloc/mmap).

 

Ca serait une perte de ressources inutiles. On pourrait aussi le garder dans la libc (un buffer ou autre, comme pour le IO fully buffered), mais ca impliquerait de devoir charger le runtime en C pour quelque chose qui est somme toute assez inutile.

 

Ce qui est pénible en C/C++, c'est l'utilisation des pointeurs. C'est leur plus grand atout mais aussi leur plus grande faiblesse. Un manque de rigueur, et ca te fait un projet codé comme un pied qui va tourner sur du x86 mais se vautrer en bus error sur du sparc, simplement pour des casts de maÿrde et des pointeurs pas correctement alignés.

Message cité 1 fois
Message édité par Gf4x3443 le 10-11-2007 à 02:38:50
Reply

Marsh Posté le 10-11-2007 à 02:54:04    

Tu peux expliquers plus en détail ta dernière phrase ca m'interesse.
Merci :jap:


---------------
"Phildar t'es vraiment une pute pas finie toi! Et Manu le gros porc arrete de t'marrer!"
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed