To svet nevidel ...
#include <iostream>
#include <wchar.h>
#include <locale.h>
using namespace std;
chybi mi tam aby to jeste pouzivalo javu, .net a nejaky javascriptovy engine.
Prvni by se pouzilo na usage, .net by treba mohl prepisovat stringy a javascriptovy kod to mohl cele ridit.
Ceckovy main() by spustil akorat ten javascript.
Sračky jako .net a javascript nebudu komentovat.
K těm knihovnám – chápu, že tohle je nad rámec toho příkladu a není to tam nezbytně nutné, nicméně chtěl jsem tam dát instrukce pro uživatele, aby věděl, co má spustit, aby si ověřil, jak to funguje. A chtěl jsem je napsat v češtině. A vzhledem k aktuálnímu letopočtu považuji unicode za základní a běžnou věc.
Jak tedy na to? Dá se to udělat nějak jednodušeji? Vím, že znaky s diakritikou jde vypsat i přes cout << "český text" << endl;
, ovšem to pracuje na úrovni bajtů a jakmile by člověk chtěl např. zarovnat/odsadit text pod sebe (přidat patřičný počet mezer), tak se to rozsype, takže by bylo potřeba celý program přepsat (tady by to bylo jedno, ale radši to píši rovnou tak, aby to fungovalo na úrovni znaků/unicodu). Co je tedy lepší? Přetížit si operátor <<
, aby podporoval vícebajtové znaky? A co s formátovacími řetězci? Tam by stejně byly tyhle funkce, ne?
Dovolím si snad konstruktivní kritiku.
Příklad je zjevně zacílený na začátečníky (zkušenějšímu by stačilo říct něco jako "stringy argv[] se dají přepsat" a bylo by vymalováno).
Pak by ukázky měly být pokud možno jednoduché, týkající se jen probíraného tématu, a rozhodně by neměly zabředávat do jiných oblastí které se probírané látky netýkají (psát správně česky je zajisté chvályhodné, ale do výkladu argv[] to fakt nepatří.) Místo toho by bylo naopak třeba hezké vědět, co se třeba stane když mám program ./x a v něm dám strcpy(argv[0], "/usr/sbin/httpd"); nebo strcpy(argv[0],"y"); - na to článek neodpovídá.
Takže závěr: držet se tématu, nekomplikovat.
P.S. Když prvňáčkům chci vysvětlit sčítání, tak taky budu sčítat jablka a ne zavádět pojem abelovská grupa.
Jinak co se týče těch dalších věcí: během psaní článku jsem zjistil akorát to, že když místo to místo 'x'
budu přepisovat nulovým bajtem, tak sice už není vidět, kolik parametrů původně bylo, ale jejich celková délka jde pořád zjistit (délka cmdline
se nemění):
Původně:
$ cat /proc/$(pidof ./přepis-cli-parametrů)/cmdline | hd 00000000 2e 2f 70 c5 99 65 70 69 73 2d 63 6c 69 2d 70 61 |./p..epis-cli-pa| 00000010 72 61 6d 65 74 72 c5 af 00 70 72 76 6e c3 ad 00 |rametr...prvn...| 00000020 64 72 75 68 c3 bd 00 74 c5 99 65 74 c3 ad 00 |druh...t..et...| 0000002f
Po přepsání:
$ cat /proc/$(pidof ./přepis-cli-parametrů)/cmdline | hd 00000000 2e 2f 70 c5 99 65 70 69 73 2d 63 6c 69 2d 70 61 |./p..epis-cli-pa| 00000010 72 61 6d 65 74 72 c5 af 00 00 00 00 00 00 00 00 |rametr..........| 00000020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |...............| 0000002f
Ještě si s tím zkusím trochu pohrát a článek následně rozšířím…