OldComp.cz
http://oldcomp.cz/

Programování v C
http://oldcomp.cz/viewtopic.php?f=113&t=3231
Stránka 411

Autor:  microlan [ 03.03.2018, 22:20 ]
Předmět příspěvku:  Re: Programování v C

Pokud se někdo chce naučit assembler, tak ať začne se Z80, tam dizajnéři pracovali hlavou.

Autor:  berk [ 03.03.2018, 22:30 ]
Předmět příspěvku:  Re: Programování v C

Jiiira píše:
Rád bych se zeptal: je v C nějak omezen počet parametrů předávaných programu z příkazové řádky? Jinými slovy, je pro argc definovaná nějaká maximální hodnota?


C-čko předává parametry přes zásobník. Podle mě je tedy omezení ve velikosti zásobníku.

Autor:  Jiiira [ 03.03.2018, 22:46 ]
Předmět příspěvku:  Re: Programování v C

berk píše:
Jiiira píše:
Rád bych se zeptal: je v C nějak omezen počet parametrů předávaných programu z příkazové řádky? Jinými slovy, je pro argc definovaná nějaká maximální hodnota?

C-čko předává parametry přes zásobník. Podle mě je tedy omezení ve velikosti zásobníku.

No, to je otázka... to asi záleží na tom, kdo vlastně vytváří argc a argv - nevytváří je náhodou op. systém při zavádění programu? Totiž, já vidím 2 možnosti: buď je vytváří OS, a pak zapíše na domluvené místo v programu (či na zásobník) jen ukazatele na ně, nebo si je vytváří aplikace, ale pak je otázka, kde je najde, resp. jak jí je OS předá, aby si z nich mohla argc a argv vytvořit...

Takže se nám to transformuje na otázku "Co se děje při zavádění/spouštění programu?" ;) , což tedy určitě závisí na OS, ale taky v tom jaksi tápu... :scratched:

Autor:  berk [ 03.03.2018, 23:19 ]
Předmět příspěvku:  Re: Programování v C

Špatně jsem si to přečetl - myslel jsem že jde o parametry funkce ale ty se ptáš na command line parametry :-(

Vzhledem k typu int argc je to dáno. Velikost intu se může lišit na různých architekturách a je definována v souboru limits.h.

Nicméně tvůj dotaz na maximální počet parametrů je podezřelý a zavání nějakým nevhodným použitím. Pokud chceš předávat větší množství dat v cmd line, tak je možná lepší použít pajpu.

Autor:  Jiiira [ 03.03.2018, 23:34 ]
Předmět příspěvku:  Re: Programování v C

berk píše:
Vzhledem k typu int argc je to dáno. Velikost intu se může lišit na různých architekturách a je definována v souboru limits.h.

Ano, ale o velikost intu mi nejde - to mě napadlo taky - a velikost intu bude určitě dostatečná 8-)

berk píše:
Nicméně tvůj dotaz na maximální počet parametrů je podezřelý a zavání nějakým nevhodným použitím. Pokud chceš předávat větší množství dat v cmd line, tak je možná lepší použít pajpu.

Naopak, já potřebuju vědět, co se dá legitimně očekávat od uživatele, resp. co se mu dá dovolit za počet parametrů... Nebo ještě jinak: jak velké množství parametrů (nad jakým limitem) mu už odmítat ;) . S nějakou hláškou "too many parameters"...

Autor:  berk [ 03.03.2018, 23:43 ]
Předmět příspěvku:  Re: Programování v C

Uživatele limituje délka commanline která závisí na OS

If you are running Windows XP or later, the maximum length of the string that you can use at the command prompt is 8191 characters.
If you are running Microsoft Windows 2000 or Windows NT 4.0, the maximum length of the string that you can use at the command prompt is 2047 characters.

Autor:  baktra [ 03.03.2018, 23:50 ]
Předmět příspěvku:  Re: Programování v C

Jak už bylo napsáno, způsob předávání parametrů nově spuštěnému programu je specifický pro operační systém.

Vytvoření a naplnění argc a argv[] má ale na starosti běhová knihovna pro C. Ta zavolá službu operačního systému a opatří si adresu předaných parametrů. Pak parametry zpracuje (naparsuje) a naplní argc a argv[]. Některé běhové knihovny lze i nastavit tak, aby vždy vracely parametry jako adresu jednoho dlouhého řetězce (typicky nějakým parametrem při spouštění překladače).

Limit na parametry je tedy závislý na více faktorech. Volání operačního systému by žádná drastická omezení klást nemělo. Prostě se předává adresa bloku paměti s parametry. Tam může být limit třeba 4 GiB. Výraznější může být omezení shellu (bash, cmd.exe, explorer.exe). Tam už to může být omezené třeba na 32 KiB nebo 256 KiB.

Také se liší význam nultého parametru (argc[0]). Pod Windows je tam třeba plná cesta ke spuštěnému souboru (to mám moc rád), pod Linuxem tam bývá jen holý příkazový řádek (fuj, jak má pak program zjistit, odkud byl spuštěn...)

Autor:  Jiiira [ 03.03.2018, 23:53 ]
Předmět příspěvku:  Re: Programování v C

Jo, už tomu začínám rozumět, díky! :thumbup:

Autor:  faraon [ 04.03.2018, 17:07 ]
Předmět příspěvku:  Re: Programování v C

Tak jsem zkusil (linux+bash) předat a vypsat 10000 desetipísmenných argumentů, něco přes 100 KB, a prošlo to. Jak z dávkového souboru tak přímo z příkazového řádku. To by pro běžného BFU mělo být dostatečné :)

Autor:  baktra [ 04.03.2018, 19:24 ]
Předmět příspěvku:  Re: Programování v C

faraon píše:
Tak jsem zkusil (linux+bash) předat a vypsat 10000 desetipísmenných argumentů, něco přes 100 KB, a prošlo to. Jak z dávkového souboru tak přímo z příkazového řádku. To by pro běžného BFU mělo být dostatečné :)


Tak zrovna u BASHe by kapacita měla být vysoká. Vzhledem k tomu, že BASH často expanduje zástupné znaky, tak i nevinně vypadající zápis s pár hvězdičkami se může rozrůst na opravdu hodně dlouhý příkazový řádek.

Autor:  Lisiak4 [ 25.08.2018, 11:19 ]
Předmět příspěvku:  Re: Programování v C

berk píše:
Pravidlo robustnosti: Robustnost je potomek přehlednosti a jednoduchosti.
Pravidlo reprezentace: Převeďte znalosti do kódu, aby mohl být program hloupý a robustní.

Busy píše:
Pravidlo robustnosti: Robustnost je potomek přehlednosti a jednoduchosti.
Robustnost je nepriatelom efektivity.

:lol:

Ale v niektorých prípadoch, keď optimalizuješ kód na rýchlosť, tak ho musíš robiť robustnejším, čo určite veľmi dobre vieš :poke:

Autor:  Marek [ 04.09.2018, 09:04 ]
Předmět příspěvku:  Re: Programování v C

Jiiira píše:
Naopak, já potřebuju vědět, co se dá legitimně očekávat od uživatele, resp. co se mu dá dovolit za počet parametrů... Nebo ještě jinak: jak velké množství parametrů (nad jakým limitem) mu už odmítat ;) . S nějakou hláškou "too many parameters"...


Při obvyklém použití už bych viděl jako podezřelé víc než nějakých 5-7 parametrů, pak už bych volil spíš jen jeden parametr - název konfiguračního souboru. Anebo už rovnou napevno počítat s nějakým .cfg či .ini souborem a tam všechny parametry mít přehledně.

Autor:  Jiiira [ 05.09.2018, 08:45 ]
Předmět příspěvku:  Re: Programování v C

Marek píše:
Jiiira píše:
Naopak, já potřebuju vědět, co se dá legitimně očekávat od uživatele, resp. co se mu dá dovolit za počet parametrů... Nebo ještě jinak: jak velké množství parametrů (nad jakým limitem) mu už odmítat ;) . S nějakou hláškou "too many parameters"...

Při obvyklém použití už bych viděl jako podezřelé víc než nějakých 5-7 parametrů, pak už bych volil spíš jen jeden parametr - název konfiguračního souboru. Anebo už rovnou napevno počítat s nějakým .cfg či .ini souborem a tam všechny parametry mít přehledně.

To se mi zdá být rozumné. :like:

Autor:  baktra [ 05.09.2018, 09:14 ]
Předmět příspěvku:  Re: Programování v C

Já bych tedy umělé limity na parametry nezaváděl.
Prostě program zkontroluje parametry a pokud jsou správné, tak je zpracuje. Pokud nesprávné, tak zobrazí srozumitelné chybové hlášení.
Jestliže program lze řídit mnoha parametry, je rozumné dát uživateli možnost uložit je do souboru a načíst je ze souboru, jak již bylo napsáno.

V BASHi může být zdrojem parametrů i výstup operátoru obrácené apostrofy. Tak se použivá systém pkg-config na předávání parametrů překladači/linkeru. Takový seznam parametrů může být hezky dlouhý.

Autor:  Busy [ 05.09.2018, 19:51 ]
Předmět příspěvku:  Re: Programování v C

Zaujimavy postreh: Chcem urcitu (kontinualnu) cast pola nastavit tak, aby kazdy prvok v tejto casti obsahoval index nasledujuceho prvku. Napadlo ma taketo jednoduche riesenie:
Kód:
index = zaciatok; while (index < koniec) pole[index] = ++index;
Ale ono toto nefungovalo. Logicky by som ocakaval, ze pri priradovacom prikaze sa najprv vyhodnoti miesto kam sa ma vysledok vyrazu zapisat, a nasledne sa vyhodnoti vyraz - teda tak, ako to chodi v kazdom slusnom jazyku (napr. ZX basic).

Lenze ono to robi uplne inak. Zo vsetkeho najprv inkrementne index a az potom sa pusti do prace na priradovacom prikaze, co mi prekazilo plan pre takyto pekny zapis...

Stránka 411 Všechny časy jsou v UTC + 1 hodina [ Letní čas ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/