(++i)*(++i)
David Šauer
davids na iol.cz
Středa Únor 10 16:25:06 CET 1999
>>>> "Petr" == Petr Novotny <Petr.Novotny na antek.cz> writes:
Petr> Mimochodem, ted jsem si vyzkousel ten druhy programek pod MSVC a
Petr> vysledek je zalostny. Co byste rekli, ze vytiskne nasledujici
Petr> programek?
Petr> #define _ -F
Petr> int main()
Petr> {
Petr> int F=0;
Petr> printf("%d",-_);
Petr> return F;
Petr> }
Petr> Jestli si myslite, ze -1, tak si myslite totez co ja,
Nemyslím.
Petr> ovsem neco
Petr> jineho nez Microsoft. (Mimochodem, pokud si v MSVC necham nejdriv
Petr> vypsat vystup preprocesoru a ten pak prelozim, tak to tiskne -1.) To
Petr> jen jako varovani, ze integrace preprocesoru s kompilatorem nemusi
Petr> byt spravny napad...
Hm, Hm ....
v tomto případě je to velmi podivné. Ono to totiž má rozvinout do
tvaru: (rozvinul cpp z egcs-1.1.1 a asi správně)
# 1 "zk.c"
int main()
{
int F=0;
printf("%d",- -F );
return F;
}
a to proto, že cpp pracuje s tokeny(jak se to přeloží?), nikoli se
znaky.
Výsledek je pak 0. Ovšem některé starší překladače
pracují se znaky, nikoli tokeny a výsledek opravdu může být -1.
Ten výsledek -1 přeložený z preprocesovaného zdrojáku je ovšem
podivný ...
Literatura: M. Virius, Pasti a propasti jazyka C++.
--
* David Sauer, student of Czech Technical University
* electronic mail: davids na iol.cz (mime compatible)
Další informace o konferenci Linux