Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno C++ - Aký majú význam "podtržítkové" funkcie?

Prečo sa identifikátory mnohých funkcií v C++ začínajú podtržítkami (_)? Aký to má vlastne zmysel? Podľa mňa to dosť zneprehľadňuje kód v zdrojovej podobe. Veď napríklad je try a __try pre VCL? Prečo je C++ také rozdrobené a zneštandardizované? Chápem, že je to pre maximálne využitie možností aktuálneho systému, ale načo try a __try? Taktiež mnohé funkcie v BC++ 3.5 pre DOS boli riešené s potržítkom, ak sa jednalo o typ premennej s väčšou dĺžkou v pamäti. Prečo to nemôže byť ako napr. v Pascale, kde pre všetky typy premenných funguje jedna funkcia, napr. GetTime? Ekvivalent pre BC++ 3.5 je GetTime a _DOS_GetTime. Prečo je to takto sťažené? Veď C++ oficiálne umožňuje viacnásobnú deklaráciu funkcie s inými parametrami.

Předmět Autor Datum
No to nevím, ale po přečtení tvého příspěvku jsem si okamžitě vzpomněl na písničku "Prečo je to tak"…
Máslo 26.05.2006 20:07
Máslo
Napriklad ohledne tech exceptions... je to tak, ze mas na vyber nekolik mechanismu osetreni vyjimek.…
Ynd0r 26.05.2006 23:35
Ynd0r
Dobre, takže tomu povedzme, že rozumiem. Ale prečo teda niečo podobné nie je v Pascale a Object Pasc…
msx. 27.05.2006 00:19
msx.
Aka multiplatformost Delphi??? ::) Ja som teda este nevidel delphi na nejakom DEC, G5, MacOS alebo U…
MM.. 27.05.2006 00:33
MM..
A nebylo by lespi vzhledem k multiplatformovosti mit jednu funkci, ktera by vyuzivala prostredky nej…
Jan Fiala 27.05.2006 10:34
Jan Fiala
Tohle prece neni o multiplatformnosti - nebo aspon jsem jeste myslim nevidel, aby byly nekde ruzne p…
Ynd0r 27.05.2006 10:55
Ynd0r
Rozne pomenovane fcie nedelaji stejnou funkci. Aj rovnaka vec sa da urobit viacerymi sposobmi, a kaz…
MM.. 27.05.2006 15:03
MM..
A k čomu je potom to CLX? Edit: SubChild.asp VCL je zalozena na WinControl, CLX je platformove nez…
msx. 27.05.2006 15:27
msx.
Akoze vyvinut dnes kniznicu Win+Linux mozes aj pre vyvojove prostredie C/C++, a aj take kniznice exi… poslední
MM.. 27.05.2006 15:46
MM..
To nie je problem C ani C++, ale je to zalezitost tvojho vyvojoveho prostredia a jeho kniznicnych fu…
MM.. 26.05.2006 23:41
MM..

Napriklad ohledne tech exceptions... je to tak, ze mas na vyber nekolik mechanismu osetreni vyjimek.
Jeden je definovany v C++ od Stroustrupa a pouziva "try", "catch" a "throw". Ve vetsich projektech ma ale celkem velkou rezii a zpomaluje.
Pak existuje efektivnejsi zpusob, ktery je "zapusten" do woken - ten pouziva "__try", "__except" a "__finally"

 __try{ ... } __except(vyraz){ exception handler }
 __try{ ... } __finally(vyraz){ termination }

Pak jsou jeste MFC exceptions, ale ty sem ted netahejme..
Protoze uvedene zpusoby jsou na sobe nezavisle (dokonce by se mohly i kombinovat, i kdyz je to vetsinou blbost), jsou proste odliseny tema podtrzitkama - a ty oficialni dostaly prednost.

U jinych funkci maji podtrzitka zase jine duvody - treba se tak oznacuji nestandardni nazvy funkci ve standardnich knihovnach, nebo funkce ktere je mozne nahradit makrem...

Dobre, takže tomu povedzme, že rozumiem. Ale prečo teda niečo podobné nie je v Pascale a Object Pascale? Pri C je to spôsobené aj tým, že C je multiplatformový jazyk a teda aby ostala multiplatformnosť zachovaná, tak sú odlišné príkazy s podtržítkom. Ale napr. v Delphi sú komponenty CLX pre zachovanie multiplatformnosti, ale podtržítka nikde. Ako je to teda riešené tam?

Aka multiplatformost Delphi??? ::) Ja som teda este nevidel delphi na nejakom DEC, G5, MacOS alebo Unixe. Existuje?

P.S. snazime sa ti vysvetlit ze sa jedna o odlisenie dvoch roznych veci. Mohlo by sa to volat aj
try1 catch1
try2 catch2

mne sa zda lepsie podtrzitko...

Ak delphi vie len jeden sposob, tak nemas podtrzitka, ale to to je problem delphi ze je obmedzeny.

Tohle prece neni o multiplatformnosti - nebo aspon jsem jeste myslim nevidel, aby byly nekde ruzne platformy odlisovany podtrzitkama. Pokud vim, standardne se pro tohle pouzivaji obycejna makra, takze jedna funkce ma pro ruzne siroke argumenty, dokonce i pro ruzne typy znaku (a unicode) i pro jine procesory stejnou syntax. Podtrzitka se pouzivaji asi z dvaceti ruznych duvodu, ale ne kvuli odliseni platforem. Je fakt, ze nekdy se tam dostanou jako "docasne" ad-hoc reseni a pozdeji zmizi, jindy zustanou... Asi nejsou esteticky nic moc, ale vzdycky nejaky duvod maji. Vsak si to vyguglujte, ja to sem pisu trochu krkolome z pdacka pres ts...:-)

Rozne pomenovane fcie nedelaji stejnou funkci. Aj rovnaka vec sa da urobit viacerymi sposobmi, a kazdy sposob moze mat ine nevyhody, ak mas moznost pouzit viac roznych sposobov ako urobit rovnaku vec, je to IMHO vyhoda, nie? V tomto pripade nejde o multiplatformost, ide o moznot urobit jednu vec na jednej platforme dvomi roznymi sposobmi.

Co sa tyka MS VC++ tak si MS asi povedal ze urobi rozsirenejsie ale podobne fcie napr. k fcii open tak nadrbal do nazvu podtrzitko (_open, http://msdn.microsoft.com/library/default.asp?url=/ library/en-us/vclib/html/_crt__open.2c_._wopen.asp), potom bud mapuje v headri nazov "open" na spravnu fciu podla toho ci unicode, tchar, a podobny bordel, alebo open vobec nedefinuje a pri portovani clovek vidi ze aha pozor windows ma bordel v znakoch (1byte vs. 2byte character, apod.).

BTW. zaoberat sa nazvami fcii/makier je IMHO dost divne (ako som pisal moze si to nazvat ako chce cez #define).

To nie je problem C ani C++, ale je to zalezitost tvojho vyvojoveho prostredia a jeho kniznicnych funkcii (a stupna opitosti autora tej ktorej kniznicnej funkcie).
Podtrzitko odlisuje fciu od originalu, ale vyzera ako original, preco sa nepouzije originalny nazov - asi za prve kvoli tomu aby ked portujes nejaky program z inej platformy ti to na tej fcii skoncilo s chybou prekladu a clovek vie ze na tejto platforme je tam nieco nestandardne, alebo v tvojom pripade toho _DOS_gettime zrejme islo o to ze tie dve fcie robia to co robia mozno inym sposobom (jedna vola fciu DOSu a druha zistuje cas mozno nejako inac), a teda logicky chces mat moznost volby ktory sposob je ti vyhodnejsi. A ak by ti bolo malo mohol by si si ´naprogramovat aj tretiu fciu, _Windows_GetTime() :-D, alebo aj dalsich milion modifikacii.

Ak sa ti tie nazvy nepacia, C/C++ ti dovoluje zadefinovat si nazvy funkcii ake chces, napr. Marta1(), Marta2(), :-), napr. cez #define (co aj dost pouziva mrkvosoft vo vc++ headroch).

Zpět do poradny Odpovědět na původní otázku Nahoru