petit pb // quel est le meilleur compilateur ? [C] - Programmation
Marsh Posté le 03-03-2001 à 19:18:17
int *var -> pointeur vers un entier, espace mémoire pointé indéfini (puisque variable non initialisée)
*var=5 -> on place 5 à une adresse mémoire indéfinie.
C'est normal que ça plante je crois... non ?
Marsh Posté le 03-03-2001 à 19:29:04
antp a raison : ton pointeur pointe n'importe où, dans ton cas, visiblement dans une zone mémoire où ton programme n'a pas accès, d'où le plantage. Tu devrais essayer
#include <stdio.h>
main()
{
int val;
int *var= &val;
*var=5;
printf(" *var= %d ", *var);//valeur de val(zone pointée par var)
printf("\n &var= %p ", &var);//adresse du pointeur var
printf("\n var= %d ", var); //adresse de val
}
Marsh Posté le 03-03-2001 à 19:52:53
je croi sque je melange certain truc en fait :
&var designe l adresse de var ?!
*var designe l objet d adresse var ?!
Marsh Posté le 03-03-2001 à 20:36:56
Oui mais ton pointeur var pointe n'importe où, là.
Pour qu'il pointe sur un endroit valable, il faut soit lui assigner l'adresse d'une variable int, soit allouer de la mémoire avec malloc.
Marsh Posté le 03-03-2001 à 21:45:53
mince je capte pu rien
je viens de chopper un exemple =
#include <stdio.h>
main()
{
int i;
int *pi;
i=5;
pi=&i;
*pi=6;
}
pkoi a la fin i vaut 6 ???
Marsh Posté le 03-03-2001 à 21:58:53
slvn a écrit a écrit : je croi sque je melange certain truc en fait : &var designe l adresse de var ?! *var designe l objet d adresse var ?! |
erreur: un pointeur est une adresse
donc &var c'est une adresse d'adresse, ca veut rien dire.
var est l'adresse (c'est un entier donc tu peux le mettre dans un printf), *var est la variable pointée, c'est-à-dire stockée
à l'adresse var .
dans ton exemple:
#include <stdio.h>
main()
{
int i;
int *pi;
i=5; i vaut 5
pi=&i; pi devient l'adresse de i
*pi=6; à l'adresse pi, on place la valeur 6, or i se trouve
également à cette adresse, donc i recoit la valeur 6
}
Marsh Posté le 03-03-2001 à 22:03:57
ou comme ça (cf Verdoux):
#include <stdio.h>
main()
{
int *var;
var=(int*)malloc(sizeof(int));
*var=5;
printf(" *var= %d ", *var);
printf("/n &var= %p ", &var);
printf("/n var= %p ", var);
}
Marsh Posté le 03-03-2001 à 23:52:55
merci de vos reponses, j ai enfin capté
--Message édité par slvn--
Marsh Posté le 04-03-2001 à 04:05:52
le meilleur compilateur C est sans aucun doute possible gcc
paramétrable à volonté, la version Unix étant l'idéal évidemment
Marsh Posté le 04-03-2001 à 10:40:20
oh_damned a écrit a écrit : le meilleur compilateur C est sans aucun doute possible gcc paramétrable à volonté, la version Unix étant l'idéal évidemment |
Je dis peut-être des bêtises mais du temps ou je m'en servait sous UNIX (AIX 4.1.???) le code n'avait pas l'air très optimisé en comparaison de ce que sortait xlc(je ne suis pas sur du nom) même avec l'option -o2
Marsh Posté le 04-03-2001 à 14:49:47
en fait qu est ce qu il sont de mieux ces compilateur ??
moi j ai choppé Dev C++, il est tout joli et en plus il marche sous windows !
mais apparement , il a une moins bonne reputation, que les autre, ..parceque justement il tourne sous windows
Marsh Posté le 04-03-2001 à 15:30:48
Dev C++ est très bien pour le C. Par contre pour le C++ vaut mieux Visual C++ ou Borland C++. Enfin bon avant j'utilisais Dev C++ et ça suffisait pour apprendre ce que c'est que les pointeurs. En plus le compilateur est très rigoureux (conversions implicites, etc...).
Marsh Posté le 04-03-2001 à 21:24:29
pour ce qui est de la rigueur de devC++ je ne peux que confirmer.
il est tellment rigoureux que presque tous les codes que je trouve sur le net pour apprendre ne se compilent pas a cause d'erreurs mineures.
si comme moi tu apprends sur le tas a partir de prgs deja fait, je sais pas si c le top devc++.
c pour ca que je cherche borland c++ pour voir si il est plus tolerant.
Marsh Posté le 04-03-2001 à 22:27:42
bah c'est pas mal un compilo rigoureux, comme ça ça évite de partir dans tout les sens dans les gros prog.
Marsh Posté le 05-03-2001 à 10:16:31
N'oubliez pas que le compilateur n'est qu'un outil dans une chaine. Un debuggeur est très important aussi, surtout quand on debute. Ca evite d'avoir a faire 3 tonnes de printf quand il y a une erreur dans les milles lignes de codes que l'on vient de se cogner. En plus ca fait gagner du temps car on peux visualiser des choses impossibles autrement (espace mémoire, enumérations, backtrace etc...).
Pour gcc, il y a gdb qui est aussi multiplateforme, avec plein de frontend graphiques (surtout sous unix, nottament DDD). VisualC++ a le sien aussi. Par contre Borland C++ version gratuite n'en a pas...
Marsh Posté le 05-03-2001 à 10:42:03
gcc a une permissibilité (si ce mot n'existe pas je vais le proposer à l'académie) que l'on peut paramétrer je crois. Si tu veux compiler en C ANSI tu peux.
Marsh Posté le 05-03-2001 à 12:16:18
je crois que le meilleur compilateur c/c++ en terme de perfs, c VectorC, mais je n'arrive même pas à télécharger une version démo !
ya aussi le compilateur Intel qui n'est pas mal du tout !
Marsh Posté le 05-03-2001 à 13:27:16
Oui GCC c'est -ansi pour les regles ansi , -Wall pour tout les warnings, -Werror pour erreurs sur les warnings, -pedantic pour la norme ISO (plus stricte que ansi je crois), -pedantic-errors pour arrets sur les warnings... Y'en a des pages comme ca...
En plus gcc est multiplateforme/multiprocesseur, donc très bien pour faire du cross-compiling (voire du canadian cross-compiling cad construire un cross-compilo sur un host different du host de destination...)
Marsh Posté le 03-03-2001 à 19:11:25
petit pb avec ce porg qui compile mais qui foire :
#include <stdio.h>
main()
{
int *var;
*var=5;
printf(" *var= %d ", *var);
printf("/n &var= %p ", &var);
printf("/n var= %p ", var);
}
========
cependant, qu est ce que vous pensez du compilateur Dev C++ ???