Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Macro/cpp

6 réponses
Avatar
JKB
Bonjour à tous,

Pour diverses raisons, j'ai besoin de faire une macro déclarant une
structure comme ceci :

structure(ma_structure)
int ...;
float ...;
endStructure

J'ai donc pris cpp et j'ai tenté :

#define __structure(name, ...) typedef struct { __VA_ARGS__ } name;
#define structure(name) __structure(name,
#define endStructure )

Le problème est sur la deuxième ligne. cpp râle parce que la
parenthèse n'est pas close. J'ai essayé de remplacer cette
parenthèse par une macro :

#define parethesis (
#define __structure(name, ...) typedef struct { __VA_ARGS__ } name;
#define structure(name) __structure parenthesis name,
#define endStructure )

Là, ça fonctionne presque. Sauf que le truc laisse donne :

__structure (ma_structure,...

et qu'il me reste un espace surnuméraire que je n'arrive pas à
virer. Une idée ? je viens de lire et relire la doc de cpp sans
trouver de solution.

Cordialement,

JKB

--
Le cerveau, c'est un véritable scandale écologique. Il représente 2% de notre
masse corporelle, mais disperse à lui seul 25% de l'énergie que nous
consommons tous les jours.

6 réponses

Avatar
viza
Hi

On Mon, 07 Jul 2008 09:49:50 +0000, JKB wrote:

structure(ma_structure)
int ...;
float ...;
endStructure




#define __structure(name, ...) typedef struct { __VA_ARGS__ } name;
#define structure(name) __structure(name,
#define endStructure )



#define structure typdef struct {
#define end_structure(name) } name

structure
int i;
double d;
end_structure(ta_structure);

HTH
viza
Avatar
JKB
Le 07-07-2008, à propos de
Re: Macro/cpp,
viza écrivait dans fr.comp.lang.c :
Hi

On Mon, 07 Jul 2008 09:49:50 +0000, JKB wrote:

structure(ma_structure)
int ...;
float ...;
endStructure




#define __structure(name, ...) typedef struct { __VA_ARGS__ } name;
#define structure(name) __structure(name,
#define endStructure )



#define structure typdef struct {
#define end_structure(name) } name

structure
int i;
double d;
end_structure(ta_structure);



Merci, mais ca, je sais faire et ca ne repond pas a la question
posee...

JKB

--
Le cerveau, c'est un v
Avatar
viza
Hi

On Mon, 07 Jul 2008 15:00:44 +0000, JKB wrote:
viza écrivait dans fr.comp.lang.c :
On Mon, 07 Jul 2008 09:49:50 +0000, JKB wrote:





structure(ma_structure)
int ...;
float ...;
endStructure


#define __structure(name, ...) typedef struct { __VA_ARGS__ } name;
#define structure(name) __structure(name, #define endStructure )



#define structure typdef struct { #define
end_structure(name) } name

structure
int i;
double d;
end_structure(ta_structure);



Merci, mais ca, je sais faire et ca ne repond pas a la question



Utilisant cpp, ce n'est pas possible car cpp require q'il y'a un ) pour
chaque ) *a la meme ligne*.

Utilisant m4 (qui ne lis pas les lignes):

define(`structure',`pushdef(`++struct++',`$1')typedef struct {')dnl
define(`endStructure',`} indir(`++struct++');popdef(`++struct++')')dnl

HTH
viza
Avatar
JKB
Le 07-07-2008, à propos de
Re: Macro/cpp,
viza écrivait dans fr.comp.lang.c :
Hi

On Mon, 07 Jul 2008 15:00:44 +0000, JKB wrote:
viza écrivait dans fr.comp.lang.c :
On Mon, 07 Jul 2008 09:49:50 +0000, JKB wrote:





structure(ma_structure)
int ...;
float ...;
endStructure


#define __structure(name, ...) typedef struct { __VA_ARGS__ } name;
#define structure(name) __structure(name, #define endStructure )



#define structure typdef struct { #define
end_structure(name) } name

structure
int i;
double d;
end_structure(ta_structure);



Merci, mais ca, je sais faire et ca ne repond pas a la question



Utilisant cpp, ce n'est pas possible car cpp require q'il y'a un ) pour
chaque ) *a la meme ligne*.

Utilisant m4 (qui ne lis pas les lignes):

define(`structure',`pushdef(`++struct++',`$1')typedef struct {')dnl
define(`endStructure',`} indir(`++struct++');popdef(`++struct++')')dnl



Merci, je vais regarder cela.

Cordialement,

JKB

--
Le cerveau, c'est un v
Avatar
Charlie Gordon
"JKB" a écrit dans le message de news:

Le 07-07-2008, à propos de
Re: Macro/cpp,
viza écrivait dans fr.comp.lang.c :
Hi

On Mon, 07 Jul 2008 09:49:50 +0000, JKB wrote:

structure(ma_structure)
int ...;
float ...;
endStructure




#define __structure(name, ...) typedef struct { __VA_ARGS__ } name;
#define structure(name) __structure(name,
#define endStructure )



#define structure typdef struct {
#define end_structure(name) } name

structure
int i;
double d;
end_structure(ta_structure);



Merci, mais ca, je sais faire et ca ne repond pas a la question
posee...



Voici une proposition simple:

#define structure(name) typedef struct name name; struct name {
#define endStructure };

Inutile de dire que je ne conseille pas ce genre d'horreurs, mais c'est
toujours moins horrible de d'avoir recours à des scripts Perl.

--
Chqrlie.
Avatar
Jean-Marc Bourguet
JKB writes:

Bonjour à tous,

Pour diverses raisons, j'ai besoin de faire une macro déclarant une
structure comme ceci :

structure(ma_structure)
int ...;
float ...;
endStructure

J'ai donc pris cpp et j'ai tenté :

#define __structure(name, ...) typedef struct { __VA_ARGS__ } name;
#define structure(name) __structure(name,
#define endStructure )



La maniere dont tu veux resoudre ton probleme me simple intrinsequement
impossible avec le preprocesseur C, meme C99. Chqrlie propose une autre
approche qui me semble n'avoir pas de problemes.

--
Jean-Marc
FAQ de fclc: http://www.isty-info.uvsq.fr/~rumeau/fclc
Site de usenet-fr: http://www.usenet-fr.news.eu.org