Newsgroup: it.comp.lang.c++
Titolo: compiti delle vacanze

HO DEI PROGRAMMI IN C DA FARE PER LE VACANZE
HO BISOGNO DI UNA MANO QUALCUNO MI PUO' AIUTARE ?

 HO BISOGNO DI UNA MANO QUALCUNO MI PUO' AIUTARE ?
No.
-- 
Mat/tia Belletti - Undergraduate student @ 
cs.unibo.it
ICQ: 33292311    - email: 
mbel...@cs.unibo.it
IRC: RedGlow     - site(s): 
http://www.cs.unibo.it/~mbellett
Linux registered user 299762 @ Linux registered machine 213003

 
beh, se paga... :-)
-- 
"Come un nano sull'orlo di un orinale dovevo muovermi in punta dei piedi"

 HO BISOGNO DI UNA MANO QUALCUNO MI PUO' AIUTARE ?
Ti rispondo senza gridare:
   Hai sbagliato newsgroup.
   Questo è quello del C++ e non quello del C.
- Dario

e' la stessa cosa...
il c++ ha solo delle cose in piu' del c

 il c++ ha solo delle cose in piu' del c
Ma straROTFL!
SiMoStro

 
ma poche poche ... :-)
diciamo che una versione riveduta e corretta del c corrisponde al 10 per 
cento del c++ e della sua libreria standard
e comunque scrivere c++ con lo stile del c è cosa assai deprecabile ed 
oltremodo noiosa
-- 
Hai recensioni nel cassetto di musica, cinema, letteratura,fumetti??
Ascolta e pentiti e se hai tempo vergognati
http://tonysuper.altervista.org

 il c++ ha solo delle cose in piu' del c
ROTFL...
Allora il compito per le vacanze che cerchi è il seguente:
   Scrivere il + piccolo sorgente (in un unico file!):
     - che non contenga nessuno pre-processor token a parte #include:
       quindi non può contenere
           #ifdef  ....
           #if     ....
           #ifndef ....
           etc.
     - che sia un programmna legale in C;
     - che una volta compilato, da un compilatore C,
       e mandato in esecuzione stampi 42;
     - che sia anche un programma legale C++;
     - che una volta compilato, da un compilatore C++,
       e mandato in esecuzione stampi 24;
Quando anch'io tornerò dalle mie vacanze
valuterò con piacere il tuo esercizio estivo.
- Dario

 il c++ ha solo delle cose in piu' del c
Uhm?
Esatto...
...e sei fai tutti i tuoi compiti sei sulla buona strada per imparare quali
sono!
;-)

    [...]
Wow!!! Non ci avevo mai pensato...
Quasi quasi ci provo anch'io :-)
Si potrebbe quasi aprire un contest ;-)

 il c++ ha solo delle cose in piu' del c
Ha anche delle cose in meno e delle cose diverse.  
Le cose in comune sono solo una piccola parte del C++ e se ci togli le
cose deprecate, obsolete, da non usare, ... non ci rimane quasi
niente.
        Mauro

 valuterň con piacere il tuo esercizio estivo.
==============
#include <stdio.h> /* <-- deprecato in c++ */
int c;int s(){struct c{int a;int b;};return sizeof(c);}
int main(){s()==sizeof(int)?printf("%d",42):printf("%d",24);}
==============
Vinto qualche cosa?
p.s.
Scusate, non ho resistito...
Lascio al nostro amico lo scoprire gli altri modi per farlo...
:-PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP
-- 
Gerolamo

 int main(){s()==sizeof(int)?printf("%d",42):printf("%d",24);}
Questo e' piu' piccolo:
#include<stdio.h>
int c;int main(){struct c{int a,b;};
puts(sizeof(c)==sizeof(int)?"42":"24");}
-- 
     Carlo Milanesi
 
http://digilander.libero.it/carlmila

Carlo Milanesi wrote:

In effetti usando sizeof il "compito per le vacanze"
č _troppo_ semplice!
Aggiungo quindi ai vincoli originali quest'altro:
    - che non contenga sizeof
Buon divertimento!
- Dario

     - che non contenga sizeof
Bah... le regole non si cambiano in corsa... e poi stai
mettendo vincoli al linguaggio. Non mi piace.
Fai vedere tu, allora, come si fa meglio.
-- 
Gerolamo

 Bah... le regole non si cambiano in corsa...
Hai ragione: le regole non si cambiano in corsa.
Allora il seguente programma è ancora più corto dei precedenti:
   #include<stdio.h>
   int main(){puts(sizeof('a')==sizeof(int)?"42":"24");}
Ma possiamo aprire un altro contest:
   Scrivere il più piccolo legale programma C che sia illegale in C++.
Il mio contributo per quest'altro contest è:
    int main(){char a[1]="a";}
Qualcuno riesce a far meglio?
- Dario

 Qualcuno riesce a far meglio?
Beh...
int main(){char a[0]="";}
ciao,
g.
Ps. il tuo nome con la legatura non piace
al mio browser...

 int main(){char a[0]="";}
int main(){return;}
Ciao
Andrea

    int main(){puts(sizeof('a')==sizeof(int)?"42":"24");}
Sarŕ che sono un po' via con la testa, oggi...
...ma proprio non capisco perchč _deve_ avere 2 comportamenti
diversi in C e C++.
-- 
Gerolamo

 diversi in C e C++.
In C, i character literals come 'a' hanno tipo int
e così sizeof('a') è eguale a sizeof(int).
In C++, i character literals come 'a' hanno tipo char,
e così sizeof('a') è eguale a sizeof(char).
Così se per esempio scrivi
     memset(&i, 'a', sizeof('a'));
allora farà cose diverse in C e C++.
Nella pratica però questo non è un vero e proprio problema
perché sia in C che in C++ le costanti di tipo char sono
implicitamente convertite nel tipo int
quando appaiono in qualsiasi espressione
(a parte, come ho detto, quando esse siano operandi
di sizeof).
- Dario

 e così sizeof('a') è eguale a sizeof(char).
Questo non garantisce che abbiano comportamenti diversi, in C++
sizeof(int) potrebbe essere uguale a sizeof(char).
        Mauro

Mauro Casini wrote:

Pignolo!
Allora diciamo che è semidecidibile:
   - se stampa 24 allora il programma era sicuramente C++.
   - se stampa 42 allora non puoi affermare nulla con sicurezza,
     ma in pratica il 99,99% delle volte il programma era C.
Va bene così?
- Dario

 Pignolo!
E no!
Era proprio quello il punto...
E poi un programmatore DEVE essere pignolo...
-- 
Gerolamo

        e mandato in esecuzione stampi 24;
 ~$ cat temp.c
 #include <stdio.h>
 int main()
 {
        printf( "%d\n",24//**/1+18
        );
 }
 ~$ gcc -ansi -x c temp.c
 ~$ ./a.out
 42
 ~$ gcc -ansi -x c++ temp.c
 ./a.out
 24
Max

 Max
Grazie.
Adesso posso andare in ferie contento!
- Dario

  }
Semplicissimo, ma geniale, non c'avrei proprio pensato :)



Prendendo spunto da questo sito 
http://david.tribble.com/text/cdiffs.htm
 (ho
trovato nei commenti questo) :
"C++ recognizes //... comments as well as /*...*/ comments.
C90 only recognizes the /*...*/ form of comments. The //... form usually
produces a syntax error in C90, but there are rare cases that may compile
erroneously without warning:
     i = (x//*y*/z++
           , w); C99 recognizes both forms of comments."
Mi è venuto un dubbio.
Ossia se compilo il programmino sopra col C99 (nuovo standard ISO/ANSI per
il C), stampa sempre 24 (provando con .NET senza ulteriori opzioni infatti
non funziona e stampa sempre 24).
Ok, non volevo rovinare la festa ed inoltre non era scritto nella domanda
che il C doveva essere ANSI, quindi bravo lo stesso... :o)

 che il C doveva essere ANSI, quindi bravo lo stesso... :o)
Quello era scontato, però non avendo specificato C89 o C99...
-- 
Gerolamo (che a sto punto ha postato la soluzione più lunga... azzz...)