Autor Zpráva
SeparateSK
Profil
Už ste skúšali predefinovať if, else, while?
V php to nejde:
<?php
    define("ak",if);
    define("inak",else);
    ak(2<3)
        echo "Funguje?";
    inak
        echo "Nefunguje";
?>
Ale v C++ hej:
#include <iostream>
#define ak if
#define inak else
int main(){
    ak(2<3)
          std::cout<<"2 je menej ako 3";
    inak std::cout<<"2 je viac ako 3";
    std::cin.get();
}

Moderátor Petr ZZZ: Vyčleněno z Hřiště. Příště prosím založ samostatné vlákno rovnou – vůbec netuším, jestli se vyčleněním někde něco neporouchalo. :-)
juriad
Profil
C++ lze chápat jako mix dvou jazyků. Jako první se při kompilaci provádějí nad zdrojákem preprocesorové instrukce (to je vše co začíná znakem #) a nahrazují se výskyty takto definovaných maker. Nahrazování funguje čistě textově.
Tedy vlastní C++-ový kompilátor dostane až kód:
// 17500 řádků includovaných z iostream.h

int main(){
    if(2<3)
          std::cout<<"2 je menej ako 3";
    else std::cout<<"2 je viac ako 3";
    std::cin.get();
}
A nemá žádnou šanci zjistit, že kdysi to nebylo "if" ale "ak".

V php jde o úplně jiný mechanismus. define definuje konstrantu, která za žádných okolností nemůže být chápána jako konstrukt jazyka.

Nechceme toto vyčlenit do běžného vlákna?
SeparateSK
Profil
juriad:
Nechceme toto vyčlenit do běžného vlákna?

Načo? Však ide iba o "perličku" z programovania v inom jazyku.

Inak aj enum v PHP chýba a občas je dosť užitočný v iných jazykoch.
<?php
    function enum(){
        $args=func_get_args();
        $c=count($args);
        $enstart=0;
        for($i=0;$i<$c;$i++,$enstart++){
            if(gettype($args[$i])=="array" && is_numeric($args[$i][1])){
                $enstart=$args[$i][1];
                define($args[$i][0],$enstart);
            }
            else define($args[$i],$enstart);
        }
    }
    enum(array(Cervena,255),Zelena,array(Modra,355),Siva);
    echo "Cervena: ".Cervena."<br />";
    echo "Zelena: ".Zelena."<br />";
    echo "Modra: ".Modra."<br />";
    echo "Siva: ".Siva."<br />";
?>
Výsledok:
Cervena: 255
Zelena: 256
Modra: 355
Siva: 356
Viem,viem... array(Cervena,255) - Cervena by malo byť v uvodzovkách ,ale aj bez nich to prejde ako string.
Len som chcel, aby sa to podobalo enum-u v iných prog. jazykoch.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: