(++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