Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
4393 connectés 

  FORUM HardWare.fr
  Programmation
  Divers

  C ISO et C++ ISO

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Précédente
Auteur Sujet :

C ISO et C++ ISO

n°1591490
gee
Bon ben hon
Posté le 25-07-2007 à 21:42:07  profilanswer
 

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!"
mood
Publicité
Posté le 25-07-2007 à 21:42:07  profilanswer
 

n°1592029
gee
Bon ben hon
Posté le 26-07-2007 à 20:12:48  profilanswer
 

[:augie]


---------------
"Phildar t'es vraiment une pute pas finie toi! Et Manu le gros porc arrete de t'marrer!"
n°1592048
Elmoricq
Modérateur
Posté le 26-07-2007 à 21:02:31  profilanswer
 

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

n°1592052
gee
Bon ben hon
Posté le 26-07-2007 à 21:11:44  profilanswer
 

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!"
n°1592057
gee
Bon ben hon
Posté le 26-07-2007 à 21:19:16  profilanswer
 

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!"
n°1592060
Elmoricq
Modérateur
Posté le 26-07-2007 à 21:27:22  profilanswer
 

"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.

n°1592062
gee
Bon ben hon
Posté le 26-07-2007 à 21:32:35  profilanswer
 

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!"
n°1592117
Taz
bisounours-codeur
Posté le 27-07-2007 à 00:32:38  profilanswer
 

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.

n°1592122
gee
Bon ben hon
Posté le 27-07-2007 à 00:52:09  profilanswer
 

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!"
n°1592123
Gf4x3443
Killing perfection
Posté le 27-07-2007 à 01:06:53  profilanswer
 

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...

mood
Publicité
Posté le 27-07-2007 à 01:06:53  profilanswer
 

n°1592124
gee
Bon ben hon
Posté le 27-07-2007 à 01:12:43  profilanswer
 

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!"
n°1592127
Gf4x3443
Killing perfection
Posté le 27-07-2007 à 01:26:21  profilanswer
 

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
n°1592129
gee
Bon ben hon
Posté le 27-07-2007 à 01:29:51  profilanswer
 

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!"
n°1592133
Gf4x3443
Killing perfection
Posté le 27-07-2007 à 02:44:29  profilanswer
 

Dans "binaire", ca inclut bytecode ou pas?

n°1592138
gee
Bon ben hon
Posté le 27-07-2007 à 03:34:39  profilanswer
 

oui


---------------
"Phildar t'es vraiment une pute pas finie toi! Et Manu le gros porc arrete de t'marrer!"
n°1631900
gee
Bon ben hon
Posté le 26-10-2007 à 18:09:29  profilanswer
 

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!"
n°1631902
Taz
bisounours-codeur
Posté le 26-10-2007 à 18:13:02  profilanswer
 

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.

n°1631908
gee
Bon ben hon
Posté le 26-10-2007 à 18:23:22  profilanswer
 

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!"
n°1631910
Taz
bisounours-codeur
Posté le 26-10-2007 à 18:27:33  profilanswer
 

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...

n°1631912
gee
Bon ben hon
Posté le 26-10-2007 à 18:28:47  profilanswer
 

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!"
n°1631916
Taz
bisounours-codeur
Posté le 26-10-2007 à 18:31:28  profilanswer
 

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

n°1631918
gee
Bon ben hon
Posté le 26-10-2007 à 18:33:57  profilanswer
 

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!"
n°1631919
Taz
bisounours-codeur
Posté le 26-10-2007 à 18:36:04  profilanswer
 

takakompilai

n°1631922
gee
Bon ben hon
Posté le 26-10-2007 à 18:38:15  profilanswer
 

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!"
n°1639617
gee
Bon ben hon
Posté le 08-11-2007 à 22:20:36  profilanswer
 

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!"
n°1639824
Taz
bisounours-codeur
Posté le 09-11-2007 à 11:14:34  profilanswer
 

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 ?

n°1640402
gee
Bon ben hon
Posté le 09-11-2007 à 17:00:51  profilanswer
 

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!"
n°1640442
Taz
bisounours-codeur
Posté le 09-11-2007 à 17:40:41  profilanswer
 

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

n°1640455
gee
Bon ben hon
Posté le 09-11-2007 à 18:32:50  profilanswer
 

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!"
n°1640457
Gf4x3443
Killing perfection
Posté le 09-11-2007 à 18:43:58  profilanswer
 

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.

n°1640495
gee
Bon ben hon
Posté le 09-11-2007 à 19:56:34  profilanswer
 

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!"
n°1640533
Ace17
Posté le 09-11-2007 à 20:47:24  profilanswer
 

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.

n°1640536
gee
Bon ben hon
Posté le 09-11-2007 à 20:49:56  profilanswer
 

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!"
n°1640539
Ace17
Posté le 09-11-2007 à 21:03:56  profilanswer
 

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.

n°1640576
gee
Bon ben hon
Posté le 09-11-2007 à 23:41:43  profilanswer
 

Bah c'est naze je trouve :(


---------------
"Phildar t'es vraiment une pute pas finie toi! Et Manu le gros porc arrete de t'marrer!"
n°1640578
deather2
Posté le 09-11-2007 à 23:56:06  profilanswer
 

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
n°1640580
Ace17
Posté le 10-11-2007 à 00:05:38  profilanswer
 

gee a écrit :

Bah c'est naze je trouve :(

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

n°1640589
gee
Bon ben hon
Posté le 10-11-2007 à 01:01:30  profilanswer
 

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!"
n°1640593
Gf4x3443
Killing perfection
Posté le 10-11-2007 à 02:37:56  profilanswer
 

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
n°1640594
gee
Bon ben hon
Posté le 10-11-2007 à 02:54:04  profilanswer
 

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!"
mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Précédente

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Divers

  C ISO et C++ ISO

 

Sujets relatifs
bonne pratique pour les jeux de caracteres (ISO 8859-1 / UTF-8 /pspad)[C#] [Résolu] Comment communiquer avec une dll c++
[Résolu] [Charset] Gros pb entre UTF8 et ISO ?[C] Des accolades "just pour le fun" ?
[HTML Mac/Linux - Les caractères € sont ils affichés avec ISO 8859-1?ORACLE 9i : problème ISO 2
Xml / ISO et python qui veut pas des caractères non ascii [Résolu]Probleme encoding ISO-8859-1 et caractère "&"
[usb linux ISO] 1 grande image : plusieurs urb's ou un seul grand ?convertir des données utf-8 en iso-8859-1
Plus de sujets relatifs à : C ISO et C++ ISO


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)