Je me demande si le mot-clé const existe en C, dans mon esprit il était limité au C++.
@ Zitoune : tu as édité ton message, j'en déduis que sur GCC en fait ça passe ?
tableaux et pointeurs
Re: tableaux et pointeurs
BCPST -> ENSG Nancy
Diplômé en 2011
Ingenieur en poste
Diplômé en 2011
Ingenieur en poste
Re: tableaux et pointeurs
Oui, apparemment le GCC que j'ai installé il y a peu le permet. Avec mon antique version ça plante, par contreCalips0 a écrit :Je me demande si le mot-clé const existe en C, dans mon esprit il était limité au C++.
@ Zitoune : tu as édité ton message, j'en déduis que sur GCC en fait ça passe ?

Il n'y a même pas besoin du const. Mais comme le dit fakbill, ce n'est pas l'esprit, et de plus, il est fort possible que d'autres compilateurs plantent dessus, c'est donc fortement déconseillé à mon avis.
Re: tableaux et pointeurs
Vérification faite, const c'est du C89 donc tout compilo digne de ce nom doit connaitre *en C*.
Les tableaux de taille définie par une variable, c'est du C99.
http://nicolasj.developpez.com/articles/c99/#LIV-F (il y a une typo dans leur page. Lire C90 et non C99).
Il est donc certain que certains vieux compilo ne vont pas connaitre.
A ce que je comprends, c'est juste une nouvelle façon légère d'écrire de l'aloc dynamique.
Le compilo ne cherche pas à connaitre la valeur de la variable à la compil pour alouer statiquement (ce qui est sans espoir dans le cas général (puisque c'est équivalent au pb de l'arret)).
Attention, le mieux serait d'aller vérifier directement dans le pdf de la norme du C90 et du C90..bref ça devient très technique.
Les tableaux de taille définie par une variable, c'est du C99.
http://nicolasj.developpez.com/articles/c99/#LIV-F (il y a une typo dans leur page. Lire C90 et non C99).
Il est donc certain que certains vieux compilo ne vont pas connaitre.
A ce que je comprends, c'est juste une nouvelle façon légère d'écrire de l'aloc dynamique.
Le compilo ne cherche pas à connaitre la valeur de la variable à la compil pour alouer statiquement (ce qui est sans espoir dans le cas général (puisque c'est équivalent au pb de l'arret)).
Attention, le mieux serait d'aller vérifier directement dans le pdf de la norme du C90 et du C90..bref ça devient très technique.
Pas prof.
Prépa, école, M2, thèse (optique/images) ->ingé dans le privé.
Prépa, école, M2, thèse (optique/images) ->ingé dans le privé.
Re: tableaux et pointeurs
Bonjour , j'ai un petit doute concernant la lecture et écriture en même temps dans un fichier binaire
je résume mon problème dans un exemple
j'ai un tableau texte comme suit
nom-1 prenom-1 B12345
nom-2 prenom-2 A12345
nom-3 prenom-3 D12345
nom-4 prenom-4 C12345
je convertit mon fichier texte en un fichier binaire
je creé un autre fichier binaire (indéxé) comme suit,:
FILE *FLBI;
FLBI=fopen("cin.bin","r+w); //ouverture du fichier en mode lecture et écriture en même temps
//cin index
B12345 0
A12345 1
D12345 2
C12345 3
après je veux trier ce dernier fichier binaire selon la case cin, le tri se fera dans le fichier sans utilier de tableau, c'est la que ça me pose problème,
voici ce que j'ai trouver comme solution:
Struct enregiscin a, b // la structure enregiscin contient un "char cin[10]" et un "int "
for(i=0;i<4;i++)
fseak(FLBI, i*sizeof(enregiscin),SEEK_SET) ;// positionnement à la ligne i
fread(&a , sizeof(enregiscin),1,FLBI); // lecture de la ligne i de FLBI et mise de cette ligne dans &a
fseak(FLBI, (i+1)*sizeof(enregiscin),SEEK_SET) ;// positionnement à la ligne i+1
fread(&b,sizeof(senregiscin),1,FLBI); // lecture de la ligne i+1 de FLBI et mise de cette ligne dans &b
// donc en gros c'est comme si je mets "a=T[ i]" et "b=T[i+1]"
res=strcmp(a.cin , b. cin);
if res>0
{fseak(FLBI, i*sizeof(enregiscin),SEEK_SET) ;// positionnement à la ligne i
fwrite(&b , sizeof(enregiscin),1,FLBI); // ecriture de &b et mise dans la ligne i de FLBI
fseak(FLBI, (i+1)*sizeof(enregiscin),SEEK_SET) ;// positionnement à la ligne i+1
fwrite(&a,sizeof(senregiscin),1,FLBI); // ecriture de &a et mise dans la ligne dans i+1
}
bon jusqu'a ici est ce correct ou bien il y'a risque que dans "fwrite(&b , sizeof(enregiscin),1,FLBI);" &b écrase &a ?
Merci
je résume mon problème dans un exemple
j'ai un tableau texte comme suit
nom-1 prenom-1 B12345
nom-2 prenom-2 A12345
nom-3 prenom-3 D12345
nom-4 prenom-4 C12345
je convertit mon fichier texte en un fichier binaire
je creé un autre fichier binaire (indéxé) comme suit,:
FILE *FLBI;
FLBI=fopen("cin.bin","r+w); //ouverture du fichier en mode lecture et écriture en même temps
//cin index
B12345 0
A12345 1
D12345 2
C12345 3
après je veux trier ce dernier fichier binaire selon la case cin, le tri se fera dans le fichier sans utilier de tableau, c'est la que ça me pose problème,
voici ce que j'ai trouver comme solution:
Struct enregiscin a, b // la structure enregiscin contient un "char cin[10]" et un "int "
for(i=0;i<4;i++)
fseak(FLBI, i*sizeof(enregiscin),SEEK_SET) ;// positionnement à la ligne i
fread(&a , sizeof(enregiscin),1,FLBI); // lecture de la ligne i de FLBI et mise de cette ligne dans &a
fseak(FLBI, (i+1)*sizeof(enregiscin),SEEK_SET) ;// positionnement à la ligne i+1
fread(&b,sizeof(senregiscin),1,FLBI); // lecture de la ligne i+1 de FLBI et mise de cette ligne dans &b
// donc en gros c'est comme si je mets "a=T[ i]" et "b=T[i+1]"
res=strcmp(a.cin , b. cin);
if res>0
{fseak(FLBI, i*sizeof(enregiscin),SEEK_SET) ;// positionnement à la ligne i
fwrite(&b , sizeof(enregiscin),1,FLBI); // ecriture de &b et mise dans la ligne i de FLBI
fseak(FLBI, (i+1)*sizeof(enregiscin),SEEK_SET) ;// positionnement à la ligne i+1
fwrite(&a,sizeof(senregiscin),1,FLBI); // ecriture de &a et mise dans la ligne dans i+1
}
bon jusqu'a ici est ce correct ou bien il y'a risque que dans "fwrite(&b , sizeof(enregiscin),1,FLBI);" &b écrase &a ?
Merci