Langage C

Discutez d'informatique ici !
Avatar de l’utilisateur
Rockleader
Habitué(e)
Messages: 2126
Enregistré le: 11 Oct 2011, 19:42

par Rockleader » 30 Aoû 2014, 18:54

Bon, j'ai un peu fait travailler mon windows, et j'ai constaté un truc; au moment de faire un define, la casse semblait jouer un rôle, c'est à dire que lorsque j'ai fait


#DEFINE VAR 5

le compilo comprenait pas.

En revanche

#define VAR 5

Là ça marche niquel.


Pourtant (j'ai passé 2 mois sans toucher au C certes^^) il me semble que tout au long de l'année quand je programmais sur mon linux, je mettais DEFINE et non define.



Réponse 1: j'ai une mémoire de poisson rouge ?

Réponse 2: le compilo interprète différemment en fonction de l'os ? Ce serait une différence entre gcc et mingw ?


Réponse 3 : Attrape ton linux et teste ton code et tu auras ta réponse ? :ptdr: (c'est la réponse fatal error ça^^); à laquelle je répond que 50 km me sépare pour le moment de mon linux et que pour un petit truc comme ça je vais pas me casser le bol à sortir une machine virtuelle :lol3:
Cette histoire est entièrement vraie puisque je l'ai inventé du début à la fin !



lulubibi28
Membre Relatif
Messages: 240
Enregistré le: 10 Nov 2013, 12:18

par lulubibi28 » 30 Aoû 2014, 19:57

Son pseudo ne viendra pas de çà par hasard ....
Gcc est déjà installé sous linux , mais j'ai installé linux sous Virtual box .Gcc est l'exigence de notre professeur , donc si c qu'une histoire de majuscules , je vais bouffer le langage C ...

Je viens de tester un fichier , j'ai compiler puis j'ai exécuter le fichier et çà marche :we:

Avatar de l’utilisateur
fatal_error
Modérateur
Messages: 6610
Enregistré le: 22 Nov 2007, 13:00

par fatal_error » 30 Aoû 2014, 22:38

donc d'abord il me semble que mingw installes gcc, donc à priori, comme #define ou #DEFINE n'a rien à voir avec des appels systèmes mais relève plus de l'erreur syntaxique, il est à parier que le comportement est analogue, à savoir que si la compilation avec gcc marche sur windows, elle marche sur linux.

La meilleure des réponses, c'est de regarder la norme...
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3337.pdf
les #define y sont écris en minuscules.
Donc au mieux les #DEFINE sont acceptés, mais dans tous les cas c'est pas une bonne pratique.
Maintenant, ca doit très certainement être écrits qu'ils sont pas acceptés...qq part, mais faut se sortir les doigts un ptit peu!
la vie est une fête :)

Avatar de l’utilisateur
Rockleader
Habitué(e)
Messages: 2126
Enregistré le: 11 Oct 2011, 19:42

par Rockleader » 30 Aoû 2014, 23:16

Bon et bien au moins comme ça c'est clair, merci pour cette réponse.
Cette histoire est entièrement vraie puisque je l'ai inventé du début à la fin !

lulubibi28
Membre Relatif
Messages: 240
Enregistré le: 10 Nov 2013, 12:18

par lulubibi28 » 31 Aoû 2014, 15:41

Merci pour l'info ^^(je viens de le télécharger) mais j'ai peur de me casser les dents avec l'anglais :doute2:

Avatar de l’utilisateur
Rockleader
Habitué(e)
Messages: 2126
Enregistré le: 11 Oct 2011, 19:42

par Rockleader » 09 Sep 2014, 11:03

Je viens de me faire un petit programme sur windows avec code block qui permet grosso modo de compter le nombre de mot d'un fichier et de me dire selon certaine critère à combien de page ça équivaudrait sur un bouquin, mais passons cela n'est pas le plus important.


Le programme marche bien, mais il semble y avoir un soucis sur la lecture du nom de fichier.

Mes fichier sont réalisé sur open office et possède donc l’extension .odt


Pour simplifier disons que j'ai un fichier nommé Prélude.odt

Lorsque mon programme se lance et que j'entre le nom du fichier, il ne le trouve pas.


En revanche, si je crée un fichier bloc note test.txt; il le trouve et fait son travail.

Sauriez vous m'expliquer un tel comportement ? Est ce parce que seul le format txt est reconnu comme du texte ?
Cette histoire est entièrement vraie puisque je l'ai inventé du début à la fin !

joel76
Membre Relatif
Messages: 230
Enregistré le: 11 Fév 2013, 16:31

par joel76 » 09 Sep 2014, 11:18

Rockleader a écrit:Pour simplifier disons que j'ai un fichier nommé Prélude.odt
Lorsque mon programme se lance et que j'entre le nom du fichier, il ne le trouve pas.
"Il ne le trouve pas" : à priori, ici c'est une erreur dans le nom de fichier que tu veux ouvrir : as-tu indiqué le bon nom avec le chemin d'accès ?

Maintenant tu dis "En revanche, si je crée un fichier bloc note test.txt; il le trouve et fait son travail." Il y a quelque chose de "curieux" dans ce que tu écris !
Ouvres-tu le fichier avec un fopen(fic, "w"), comme un fichier texte ? Un .odt n'est pas un fichier texte, il faut l'ouvrir comme un binaire (avec "wb")
Pour un fichier texte, La différence est minime entre "w" et "wb", il y a parfois des conversions de caractères de fin de ligne pour adapter à l'environnement du SE hôte. Par contre je pense que "tout peut arriver" quand on ouvre un fichier binaire en texte, l'ouverture doit réussir mais la lecture doit donner des résultats erratiques.

Avatar de l’utilisateur
fatal_error
Modérateur
Messages: 6610
Enregistré le: 22 Nov 2007, 13:00

par fatal_error » 09 Sep 2014, 11:23

salut,

cette discussion, c'est un peu une discussion poubelle ou ya tous tes problèmes :/
tu devrais songer à créer une nouvelle discussion pour chaque problème différent..

ensuite, non, t'as du faire un truc mauvais. tu peux ouvrir n'importe quel fichier... si tu as les droits de lecture.
la vie est une fête :)

Avatar de l’utilisateur
Rockleader
Habitué(e)
Messages: 2126
Enregistré le: 11 Oct 2011, 19:42

par Rockleader » 09 Sep 2014, 11:26

Je l'ouvre avec r+

Et non il n'y a pas d'erreur dans le nom du fichier^^

A moins que l'accent pose un problème ?


EDIT: ouai c'est vrai que j'ai tendance à remettre ici chaque soucis sur le C, j'y penserais la prochaine fois !

EDIT 2; pour le besoin du test je ne me suis pas embarrassé des chemins, j'ai placé l'exe dans le répertoire contenant les fichiers.
Cette histoire est entièrement vraie puisque je l'ai inventé du début à la fin !

Avatar de l’utilisateur
ampholyte
Membre Transcendant
Messages: 3940
Enregistré le: 21 Juil 2012, 08:03

par ampholyte » 09 Sep 2014, 11:31

Bonjour,

Il peut en effet s'agir d'un problème d'accent. As-tu essayé de renommer sans accent ?

Pour récupérer l'erreur du fopen tu peux écrire :

Code: Tout sélectionner
#include
#include
#include

#define FILENAME "prelude.odt"

int main(void) {
    FILE *file = NULL;

    file = fopen(FILENAME, "r+");
    if (file == NULL) {
        fprintf(stderr, "file : error fopen : %s %s\n", strerror(errno), FILENAME);
        return (1);
    }
   
    fclose(file);
   
    return (0);
}

Avatar de l’utilisateur
Rockleader
Habitué(e)
Messages: 2126
Enregistré le: 11 Oct 2011, 19:42

par Rockleader » 09 Sep 2014, 11:41

Effectivement ça venait bien de l'accent, cette fois le fichier s'ouvre. J'ai pas le bon mode de lecture à cause de cette histoire de binaire à mon avis, mais au moins il s'ouvre^^

Merci !
Cette histoire est entièrement vraie puisque je l'ai inventé du début à la fin !

Avatar de l’utilisateur
fatal_error
Modérateur
Messages: 6610
Enregistré le: 22 Nov 2007, 13:00

par fatal_error » 09 Sep 2014, 11:47

salut ampholyte ya t-il une raison à return (-1) et non return -1, et aussi pourquoi retourner -1 quand tu peux retourner 1?
la vie est une fête :)

joel76
Membre Relatif
Messages: 230
Enregistré le: 11 Fév 2013, 16:31

par joel76 » 09 Sep 2014, 12:10

Le mieux est de retourner EXIT_SUCCESS ou EXIT_FAILURE

Avatar de l’utilisateur
fatal_error
Modérateur
Messages: 6610
Enregistré le: 22 Nov 2007, 13:00

par fatal_error » 09 Sep 2014, 12:17

beuah, probablement pour le multi plateforme, mais c'est vachement verbeux.
0 pour success et n'importe quoi d'autre pour failure c'est quand même plus court, moins agressif et pas mal portable...

ma question porte essentiellement sur les parenthèses, et la raison du -1 préféré à n'importe quelle autre valeur
la vie est une fête :)

Avatar de l’utilisateur
ampholyte
Membre Transcendant
Messages: 3940
Enregistré le: 21 Juil 2012, 08:03

par ampholyte » 09 Sep 2014, 15:52

fatal_error a écrit:beuah, probablement pour le multi plateforme, mais c'est vachement verbeux.
0 pour success et n'importe quoi d'autre pour failure c'est quand même plus court, moins agressif et pas mal portable...

ma question porte essentiellement sur les parenthèses, et la raison du -1 préféré à n'importe quelle autre valeur


Pour le -1 c'était une faute de frappe que j'ai modifié 10 secondes après avoir envoyé le post (mais pas assez rapide il faut croire :p).

Pour les parenthèses c'est une règle de développement professionel qui m'est imposée donc du coup ...
Ensuite de la même manière une règle de développement pro m'oblige à renvoyer une valeur négative en cas de problème et une valeur positive pour valider (ou 0) dans toutes mes fonctions.

Enfin je voulais simplement expliquer à rockleader ce qu'il pouvait ajouter à son code pour comprendre ce qui peut provoquer un echec sur le fopen.

Avatar de l’utilisateur
Rockleader
Habitué(e)
Messages: 2126
Enregistré le: 11 Oct 2011, 19:42

par Rockleader » 09 Sep 2014, 17:44

Enfin je voulais simplement expliquer à rockleader ce qu'il pouvait ajouter à son code pour comprendre ce qui peut provoquer un echec sur le fopen.


J'en ai bien pris note pour la prochaine erreur de ce style ;) Merci !
Cette histoire est entièrement vraie puisque je l'ai inventé du début à la fin !

 

Retourner vers ϟ Informatique

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 3 invités

Tu pars déja ?



Fais toi aider gratuitement sur Maths-forum !

Créé un compte en 1 minute et pose ta question dans le forum ;-)
Inscription gratuite

Identification

Pas encore inscrit ?

Ou identifiez-vous :

Inscription gratuite