Quesito biricchino di programmazione in C (birra in palio)

Roberto A. Foglietta wrote:

----------------------------------------------------
  Alessandro Vernassa tu sei fuori gioco perchè ti ho
  già comuicato la soluzione: NON FARE IL FURBO! :wink:
----------------------------------------------------

Huh?

Ciao,

Ciao Roberto,

  if(err) [5]
  esci(err);
  else
    printf("ciao!\n");

[...]

  Ora il quesito è: <<se invece fossi ostinato e volessi scrivere
prorpio così, come la [5], confondendo la macro con una funzione? Avete
un idea di come si può fare?>>

#define esci(x) do { \
    ret = (a); \
                goto RITORNA; \
  } while (0)

Viene fatto cosi' spesso nel codice del Kernel; Una spiegazione esaustiva del
problema lo trovi su kernelnewbies.org .

HTH,
Thomas

Thomas Pircher ha scritto:

Roberto A. Foglietta wrote:

----------------------------------------------------
Alessandro Vernassa tu sei fuori gioco perchè ti ho
già comuicato la soluzione: NON FARE IL FURBO! :wink:
----------------------------------------------------

Huh?

Ciao,

Ciao Roberto,

if(err) [5]
esci(err);
else
   printf("ciao!\n");

[...]

Ora il quesito è: <<se invece fossi ostinato e volessi scrivere
prorpio così, come la [5], confondendo la macro con una funzione? Avete
un idea di come si può fare?>>

#define esci(x) do { \
    ret = (a); \
                goto RITORNA; \
  } while (0)

Viene fatto cosi' spesso nel codice del Kernel; Una spiegazione esaustiva del
problema lo trovi su kernelnewbies.org .

  mi hanno detto che questa settimana è anche uscito su linux magazine...
...che sfiga io non lo sapevo!
  :-(

  *figura di merda*

  comunque altri sono stati più astuti e mi hanno scritto in privato per
non rovinare la sorpresa a chi non lo sapeva!
  ;-)

  Ciao,

Roberto A. Foglietta ha scritto:

==== (QUESITO) ====

Ora il quesito è: <<se invece fossi ostinato e volessi scrivere
prorpio così, come la [5], confondendo la macro con una funzione? Avete
un idea di come si può fare?>>

Io ho trovato una soluzione ed è così carina IMHO quanto altrettanto
sconosciuta che merita di essere diffusa... anche perchè pare sia una di
quelle cose che programmatori con 10/15 anni di esperienza sulle spalle
ritengono sia un limite invalicabile e si piegano al volere della
sintassi del C. Lo scopo del gioco è quello di prendersi gioco del
parser/compilatore C e lancio la sfida: una birra in palio al chi lo
scopre. Scadenza il 16 giugno 2004, fra una settimana!
:wink:

  Fine del gioco e doppia figura di merda per me:

  - mi hanno detto che la soluzione do { ... } while(0) è usata spesso
    nel kernel

  - mi hanno riferito che è uscita di recente su linux magazine

  scusate ma pensavo fosse un'idea originale... non potrò brevettarla!
  ;-)

  Benjamin e Thomas hanno vinto una birra che offrirò loro alla prima
riunione del LinuxBZ (o questo o il prossimo giovedì).
  :-)

  Ciao,

Roberto A. Foglietta wrote:

  comunque altri sono stati più astuti e mi hanno scritto in privato per
non rovinare la sorpresa a chi non lo sapeva!

Upps, sorry!
Non avevo letto bene il soggetto.

Tho"vecchio marpione"mas