Aller au menu - Aller au contenu

Le préprocesseur

Pour accéder à cette section
Connectez-vous !
connexion_rpx
Page Précédente  1  2  3  4  Suivante
Pseudo Commentaire
Page Précédente  1  2  3  4  Suivante
Hors ligne Anonyme # Posté le 03/12/2009 à 17:25:29

Citation
Salut,j'ai un jeu open source et j'ai trouvé ça dans le main.

#pragma once

Qu'est ce que sa veut dire?


La question date mais on peut répondre quand même : c'est une directive OpenMP.
Hors ligne Marcucio # Posté le 21/12/2009 à 02:51:56
"2 nains", il fera jour !
Avatar

Ville : Amnéville-les-thermes
Pays : France métropolitaine

Bonsoir,

J'ai découvert une erreur qui peut souvent arriver au moment où on définit une macro sans Else (dans la condition)

Code : C
1
2
3
4
5
6
7
8
9
#define MAJEUR(age) if (age >= 18) \
                    printf("Vous etes majeur\n");

int main(int argc, char *argv[])
{
    MAJEUR(22)

    return 0;
}


Dans ce cas si on change la valeur et que l'on met une valeur inférieure à 18, l'ordinateur commence à s'affoler au moment dans la compilation.

En effet, j'ai reçu à la compilation un message d'alerte d'avast m'informant qu'un virus risque de rentrer dans l'ordinateur, et pas n'importe lequel, puisqu'il le reconnait comme un cheval de Troie.


Dans ce cas, il faut mettre un Else :)

Voilà, en espérant en aider certains



 
Hors ligne Tilwayne # Posté le 15/01/2010 à 16:49:18

Marcucio je ne vois vraiment pas de quoi tu parles, j'ai essayer de mettre une valeur inférieure à 18, mais rien de spécial, le programme se termine tout simplement.
Hors ligne neoxsam # Posté le 31/01/2010 à 11:07:43
Avatar

Je suis plutôt d'accord avec les erreurs bizares xD
J'avais mis un éspace dans ma ligne scanf ==> scanf(" %d", &bidule); et sa ne marché pas xD
Hors ligne CelineJapon # Posté le 09/02/2010 à 03:32:20

Bonjour,

J'ai un problème avec un define.
Voilà mon code :

#include <stdio.h>
#include <stdlib.h>
#define MAJEUR(age) if (age >= 18) \
printf("Vous etes majeur \n"); \
else \
printf("Vous etes mineur");

int main()
{
int age = 0;

printf("Quel age avez-vous ? ");
scanf("%d",age);
MAJEUR(age)

return 0;
}

Ca plante juste après la question "Quel age avez-vous ?" et je ne vois pas pourquoi...
Quelqu'un voit l'erreur ?
Hors ligne Ale06 # Posté le 12/02/2010 à 20:18:24
[...]
Avatar

Il manque un "petit" quelque chose dans le scanf...
Secret (cliquez pour afficher)
Et le & alors, on en fait quoi :colere2: :D


Sinon, on a déja inventé un truc comme les macro: les Fonctions.
Ben oui, j'ai pas compris la différence...
Hors ligne CelineJapon # Posté le 15/02/2010 à 05:37:13

Et c'était juste ça !!!
Merci pour la réponse. Même si j'ai un peu honte...
Hors ligne Yumata # Posté le 29/06/2010 à 22:23:31
Avatar

Salut!!Svp pourriez vous me donner un petit exemple contenant les conditions du preprocesseur (#if
#elif
#endif)
parcke cest mentionné rapidement sur le cours sans exemple avec
Et merci D'avance
Hors ligne i00k # Posté le 14/07/2010 à 17:44:39
Waboooooow
Avatar

Avis : Très bon

Ville : Sèvres
Pays : France métropolitaine

Marcucio a raison. Juste avec ce code :
Code : C
1
2
3
4
5
6
7
8
#include <stdio.h>

int main()
{
printf("Hello World\n");

return 0;
}


Avast a deplacé mon projet en quarantaine !

Mais, cette époque est révolue, car maintenant, je suis sous mac :pirate: :pirate: :diable:
 
Hors ligne $peculator # Posté le 27/07/2010 à 08:48:20
Café addict
Avatar

Je ne crois pas que ce soit :
Code : C
1
2
3
#ifdef WINDOWS
    /* Code source pour Windows */
#endif

mais plutôt cela pour Windows :
Code : C
1
2
3
#ifdef WIN32
    /* Code source pour Windows */
#endif


En tout cas, c'est ce que m'a fait comprendre MVC++ :)
Hors ligne Meeshkah # Posté le 17/08/2010 à 17:29:09

Ville : Courbevoie
Pays : France métropolitaine
Études : ISBS-Paris

Bonjour!

Encore et toujours, un grand merci a M@teo pour son tuto, absolument formidable pour debuter en la matiere (c'est valable pour tous ses tutos, en fait :p )

Je suis venu verifier un info, mais je n'ai rien trouve ni dans le tuto, ni dans les commentaires, ni dans le forum C pour y repondre, ET COMME je me suis dit que l'info pourrait tout aussi bien faire partie du cours, je pose ma question ici:

> Dans quel ordre sont effectuees les commandes proprocesseur ? J'explique: j'ai bien l'impression que c'est un 'langage' dit procedurier et aue donc les instructions sont effectuees les unes apres les autres, c'est-a-dire les premieres ecrites avant les dernieres ecrites. Je precise cela pour cette raison: si par exemple j'utilise ce code:

Code : C
1
2
3
4
5
6
#define PI 3.141592654
#define AIRE(rayon) PI*rayon*rayon

// et plus loin...

printf("Aire = %f", AIRE(5.0));


... ma question est: dans quel ordre vont s'effectuer les 'remplacements' par le preprocesseur ? Vais-je afficher le bon resultat ( :) ) ou y aura-t-il une erreur d'afichge ( o_O ) ?
Dans ce code C, si je dis que le preproceseur est procedurier, ca compile sans probleme, mais... :euh: ?

Au risque de me repeter, je soutiens que c'est une info utile au cours (j'en vois deja venir avec des fourches parce que je n'ai pas poste dans le forum :o Auquel cas je vous demande grace!)

PS: dsl pour les accents (ben oui y en a pas o_O) mais je les ai pas sur mon clavier...
Hors ligne Meeshkah # Posté le 18/08/2010 à 13:41:26

Ville : Courbevoie
Pays : France métropolitaine
Études : ISBS-Paris

Je re:

En fait la reponse est dans le cours, mais pas explicitement. :p

Je me repond donc a moi meme: oui, le preprocesseur effectue ses remplacements comme un langage procedurier. L'exemple que j'ai donne (comme dans le cours en fait !) est donc valable.

Je vois prie de m'excuser d'avoir trouble l'ordre public ^^ Je laisse ma question au cas ou un autre se la poserait.

Bonne progra a vous!

M
Hors ligne zaglet # Posté le 26/08/2010 à 19:31:06
e=mc²
Avatar

Études : Faculté des sciences de Boumerdes

Citation : Marcucio
Dans ce cas si on change la valeur et que l'on met une valeur inférieure à 18, l'ordinateur commence à s'affoler au moment dans la compilation.


Chez moi je remarque juste une bref lenteur lors de l'exécution de la console :) rien de plus.
 
Hors ligne alatox # Posté le 03/09/2010 à 13:49:15

Avis : Très bon

Perso, je préfère toujours utiliser des "const" et des fonctions "inline" plutôt que le préprocesseur qui a tendance à "affoler l'ordinateur lors de la compilation" comme tu le dis si bien.
Hors ligne kr971 # Posté le 02/11/2010 à 22:20:02

Bonjour, j'aimerais savoir si on pouvait modifier la valeur d'un #define en fonction d'une variable dans le code . Merci
Hors ligne kr971 # Posté le 02/11/2010 à 22:20:44

j'ai besoin d'une solution rapidement, merci de m'aider svp
Hors ligne noede # Posté le 12/11/2010 à 16:19:12

Comme toujours, merci pour le tuto :) .

Par contre, je regrette personnellement qu'il n'y ait pas un petit peu plus de détails sur les commandes préprocesseur.

Par exemple, j'aurais aimé savoir s'il est possible à l'aide de #if, #elif et compagnie de mettre des conditions sur des parties du code.

On pourrait ainsi avoir dans un code source, une première partie que l'on garderait toujours puis une seconde partie que l'on pourrait modifier grâce à un #define, puis la fin du code qui serait toujours pareil.

(grosso modo, j'aimerais savoir s'il est possible d'inclure des commandes préprocesseur à l'intérieur d'une commande préprocesseur; et si oui, comment ^^)

Je chercherais ailleurs, tant pis :p

EDIT: pas eu besoin d'aller bien loin: http://www.siteduzero.com/tutoriel-3-2 [...] ocesseur.html
Hors ligne Rhystical # Posté le 14/12/2010 à 14:57:46

bonjour tout le monde je suis nouveau ici et j'ai une question poche main bon jpa capable de la résoudre, j'essaie de mettre mes constante dans mon fichier main.h , mais quand jessaie de de compiller , le main.c voie pas mes constante dans l'autre fichier et pourtant je rajoute #include "main.h" dans mon fichier main.c
Hors ligne alex0 # Posté le 27/12/2010 à 13:30:11
Avatar

Avis : Bon

Ici c'est les commentaires, pour résoudre un problème adresse toi au forums ;)

L'informasite ;)

Dites non au tabac, avec un peu de volonté tout le monde peut arrêter.
 
Hors ligne lepoulpe10 # Posté le 28/12/2010 à 16:37:06
Avatar

Ville : Sainte hélène du lac
Pays : France métropolitaine

Bonjour,
j'ai des soucis avec mes préprocesseurs concernant la portée de ceux-ci; je m'explique :
- j'ai créé une structure dans le main.h
- j'ai fait le #include main.h
#include fonction1.h
#include fonction2.h dans main.c
et la, impossible d'utiliser ma structure dans fonction1.c ou fonction2.c :(
qu'est ce que j'ai pas saisi ?
merci d'avance

20/12/2010 - je commence le C... :euh:
03/01/2011 - je commence le C++... o_O
13/01/2011 - je commence le Qt... :-°
25/01/2011 - je commence le Qsql/MySQL... :(
 
Hors ligne lepoulpe10 # Posté le 28/12/2010 à 16:39:19
Avatar

Ville : Sainte hélène du lac
Pays : France métropolitaine

oups autant pour moi, je me suis très certainement trompé d'endroit pour le poste

20/12/2010 - je commence le C... :euh:
03/01/2011 - je commence le C++... o_O
13/01/2011 - je commence le Qt... :-°
25/01/2011 - je commence le Qsql/MySQL... :(
 
Hors ligne Beshararyu # Posté le 10/01/2011 à 19:32:17
Chickenz inside
Avatar

Pour ceux qui auraient un clavier QWERTZ, l'underscore s'obtient en faisant AltGr +tiret (le tiret, et donc l'underscore se situe à droite du point)
Sinon, ce tutoriel est excellent, encore bravo à M@teo21 le :magicien:

Forty-two or tea for two?
Please help a dragon and Pokémon breeder...
Créez le buzz!
 
Hors ligne amino23fr # Posté le 24/01/2011 à 13:51:46
Avatar

#if condition
/* Code source à compiler si la condition est vraie */
#elif condition2
/* Sinon` si la condition 2 est vraie` compiler ce code source */
#endif


SVP n'importe kel exemple de source avec ça !!!!!


merci bcp
Hors ligne rider_prog # Posté le 13/02/2011 à 08:59:29

Bonjour à tous et à toutes

Je voudrais savoir s'il est possible que l'utilisateur choisise la valeur d'une macro ?

Merci
Hors ligne simariato # Posté le 22/07/2011 à 13:17:41
Avatar

Bonjour,

Je ne vois pas très bien la différence entre les define et le fait de déclarer nos chiffres grâce à static int ect... Ils sont pourtant tous deux valables dans l'ensemble du programme me semble t il.

Merci! ;)
Hors ligne 666by # Posté le 23/07/2011 à 23:23:24
Avatar

Avis : Très bon

un 'static int' est une variable "manipulable" dans l’exécutable

un '#define' est une constante "non manipulable" qui n'existe que pendant la compilation et qui est remplacer pendant celle-ci par la valeur correspondante

- Pourquoi on inventerai pas la bêtise artificiel ?
- Elle est déjà trop présente naturellement.
 
Hors ligne Aurxk08 # Posté le 28/07/2011 à 18:38:16
Avatar

Avis : Très bon

Coucou tout le monde, ma question va peut-être être un peu bête mais lorsque l'on fait des macros avec paramètres, pour n'est-il pas nécessaire de dire si c'est un char ou un int ou autre chose?
Hors ligne gameover007 # Posté le 01/08/2011 à 15:56:33

je suis malade ou ça devient de plus en plus facile... :euh:
dans le genre chapître vacance on ne fait pas mieux :-°
les macros ne sont QUE des aides à la frappe des programmes, c'est comme à dit M@téo21 un simple rechercher/remplacer.
Pour répondre au message précédent, en fait tu ne met pas les int, double, etc... parce que tu les déclare avec une variable dans le programme mais rien ne t'empêche de déclarer une variable avec int, double, etc... sous forme de macro, simplement ça n'a pas de sens vu que comme c'est une variable tu va la créer qu'une fois donc la macro ne te sert à rien.
par contre tu veux créer une macro pour créer toutes tes variables dans ce cas ta macro sera du genre MaVariable(type, nom, valeur).
d'ailleurs si ta valeur est toujours nul et que ta variable est toujours du même type alors tu simplifie par juste MaVariable(nom) ;)
si tu veux aller encore plus vite tu ne tape toute tes variables mais juste 3 macros, une pour les int, une pour les double et une pour les char, après tu n'auras qu'a taper dans ton programme par exemple VariableInt(nom) ou VariableDouble(nom) ou VariableChar(nom) :)
cette notion d'être faignant de taper les lignes c'est pas que de la faignantise, simplement quand les programmes deviennent chargé on a plus trop les yeux en faces des trous donc si on oubli un symbole c'est foutu donc autant dès le début se simplifier la vie.
tout devient plus simple du coup ;)
Connecté saltonsea # Posté le 02/09/2011 à 15:51:34

Juste une petite question (certainement très bête) : d'habitude, on déclare les variables des fonctions (ex: Majeur (int age) :D :-° ) ... mais ici, dans le #define MAJEUR(age) :euh: :euh: o_O o_O non ... est-ce normal .... j me pose la question car si on met dans le corps du programme : MAJEUR(19.2) ... est-ce que ça planterait-il pas ? :o
Hors ligne patashop # Posté le 26/01/2012 à 14:01:41
Avatar

edit ; désolé je me suis trompé de post :p je voulais poster dans le cours sur créez vos propres type de variables, bon super cours j'apprends plein de trucs ;)
Pour accéder à cette section
Connectez-vous !
connexion_rpx