OldComp.cz

Komunitní diskuzní fórum pro fanoušky historických počítačů

Reklama!

Právě je 18 pro 2018, 20:37

Všechny časy jsou v UTC + 1 hodina




Odeslat nové téma Odpovědět na téma  [ Příspěvků: 121 ]  Přejít na stránku Předchozí  1, 2, 3, 4, 5, 6, 7 ... 9  Další
Autor Zpráva
 Předmět příspěvku: Re: Programování v C
PříspěvekNapsal: 03 bře 2018, 21:20 
Offline
Profík
Uživatelský avatar

Registrován: 16 bře 2017, 10:36
Příspěvky: 662
Bydliště: Kósek vod Brna
Has thanked: 29 times
Been thanked: 43 times
Pokud se někdo chce naučit assembler, tak ať začne se Z80, tam dizajnéři pracovali hlavou.

_________________
TEMS-49, PMI-80, rep. MK14, ZX81, ZXspectrum+, TI58, MZ-800


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Programování v C
PříspěvekNapsal: 03 bře 2018, 21:30 
Online
Radil

Registrován: 27 zář 2014, 22:56
Příspěvky: 442
Has thanked: 387 times
Been thanked: 201 times
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.

_________________
ZX Spectrum DELTA, D80, Melodik, XY4150, Aritma 0512
PGP: A6EA 1F93 EF6B D8D1 35AD B6D7 1E79 73E5 1B28 17F9


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Programování v C
PříspěvekNapsal: 03 bře 2018, 21:46 
Offline
Pan Generální
Uživatelský avatar

Registrován: 18 čer 2013, 19:26
Příspěvky: 2248
Has thanked: 83 times
Been thanked: 323 times
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:

_________________
www.zxsparrow.com


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Programování v C
PříspěvekNapsal: 03 bře 2018, 22:19 
Online
Radil

Registrován: 27 zář 2014, 22:56
Příspěvky: 442
Has thanked: 387 times
Been thanked: 201 times
Š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.

_________________
ZX Spectrum DELTA, D80, Melodik, XY4150, Aritma 0512
PGP: A6EA 1F93 EF6B D8D1 35AD B6D7 1E79 73E5 1B28 17F9


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Programování v C
PříspěvekNapsal: 03 bře 2018, 22:34 
Offline
Pan Generální
Uživatelský avatar

Registrován: 18 čer 2013, 19:26
Příspěvky: 2248
Has thanked: 83 times
Been thanked: 323 times
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"...

_________________
www.zxsparrow.com


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Programování v C
PříspěvekNapsal: 03 bře 2018, 22:43 
Online
Radil

Registrován: 27 zář 2014, 22:56
Příspěvky: 442
Has thanked: 387 times
Been thanked: 201 times
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.

_________________
ZX Spectrum DELTA, D80, Melodik, XY4150, Aritma 0512
PGP: A6EA 1F93 EF6B D8D1 35AD B6D7 1E79 73E5 1B28 17F9


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Programování v C
PříspěvekNapsal: 03 bře 2018, 22:50 
Offline
Profík
Uživatelský avatar

Registrován: 31 srp 2014, 15:27
Příspěvky: 587
Bydliště: Praha
Has thanked: 39 times
Been thanked: 143 times
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...)


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Programování v C
PříspěvekNapsal: 03 bře 2018, 22:53 
Offline
Pan Generální
Uživatelský avatar

Registrován: 18 čer 2013, 19:26
Příspěvky: 2248
Has thanked: 83 times
Been thanked: 323 times
Jo, už tomu začínám rozumět, díky! :thumbup:

_________________
www.zxsparrow.com


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Programování v C
PříspěvekNapsal: 04 bře 2018, 16:07 
Offline
Pan Štábní
Uživatelský avatar

Registrován: 23 bře 2014, 19:13
Příspěvky: 1631
Has thanked: 67 times
Been thanked: 283 times
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é :)

_________________
"When I designed Voyager, I did it on an Apple II with 48K of memory, and I wrote my own Basic program." - Burt Rutan
Obrázek Obrázek


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Programování v C
PříspěvekNapsal: 04 bře 2018, 18:24 
Offline
Profík
Uživatelský avatar

Registrován: 31 srp 2014, 15:27
Příspěvky: 587
Bydliště: Praha
Has thanked: 39 times
Been thanked: 143 times
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.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Programování v C
PříspěvekNapsal: 25 srp 2018, 10:19 
Offline
Pan Štábní
Uživatelský avatar

Registrován: 13 kvě 2013, 08:15
Příspěvky: 1706
Bydliště: Brno
Has thanked: 410 times
Been thanked: 138 times
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:

_________________
Amiga - PMD 85
Kafasoft


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Programování v C
PříspěvekNapsal: 04 zář 2018, 08:04 
Offline
Kecka

Registrován: 24 bře 2018, 12:37
Příspěvky: 36
Has thanked: 1 time
Been thanked: 5 times
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ě.

_________________
Atari 800XE, Amiga 1200 Tower, SMS, SMD + Sega CD, Sega GG, SNES, GamePark32, GP2X, Dingoo, PS2, PS4Pro


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Programování v C
PříspěvekNapsal: 05 zář 2018, 07:45 
Offline
Pan Generální
Uživatelský avatar

Registrován: 18 čer 2013, 19:26
Příspěvky: 2248
Has thanked: 83 times
Been thanked: 323 times
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:

_________________
www.zxsparrow.com


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Programování v C
PříspěvekNapsal: 05 zář 2018, 08:14 
Offline
Profík
Uživatelský avatar

Registrován: 31 srp 2014, 15:27
Příspěvky: 587
Bydliště: Praha
Has thanked: 39 times
Been thanked: 143 times
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ý.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Programování v C
PříspěvekNapsal: 05 zář 2018, 18:51 
Online
Pan Generální

Registrován: 22 kvě 2013, 20:14
Příspěvky: 2045
Bydliště: Bratislava
Has thanked: 224 times
Been thanked: 380 times
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...


Nahoru
 Profil  
 
Zobrazit příspěvky za předchozí:  Seřadit podle  
Odeslat nové téma Odpovědět na téma  [ Příspěvků: 121 ]  Přejít na stránku Předchozí  1, 2, 3, 4, 5, 6, 7 ... 9  Další

Všechny časy jsou v UTC + 1 hodina


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 1 návštěvník


Nemůžete zakládat nová témata v tomto fóru
Nemůžete odpovídat v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete přikládat soubory v tomto fóru

Hledat:
Přejít na:  
Založeno na phpBB® Forum Software © phpBB Group
Český překlad – phpBB.cz