OldComp.cz

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


Právě je 28.03.2024, 22:47

Všechny časy jsou v UTC + 1 hodina [ Letní čas ]




Odeslat nové téma Odpovědět na téma  [ Příspěvků: 159 ]  Přejít na stránku Předchozí  1, 2, 3, 4, 5, 6, 7 ... 11  Další
Autor Zpráva
 Předmět příspěvku: Re: Programování v C
PříspěvekNapsal: 03.03.2018, 22:20 
Offline
Pan Štábní
Uživatelský avatar

Registrován: 16.03.2017, 11:36
Příspěvky: 1493
Bydliště: Kósek vod Brna
Has thanked: 101 times
Been thanked: 112 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.03.2018, 22:30 
Offline
Radil

Registrován: 27.09.2014, 23:56
Příspěvky: 446
Has thanked: 436 times
Been thanked: 230 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.03.2018, 22:46 
Offline
Pan Generální
Uživatelský avatar

Registrován: 18.06.2013, 20:26
Příspěvky: 2487
Has thanked: 115 times
Been thanked: 424 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:

_________________
"Je lepší rozsvítit byť jen malou svíčku, než jen proklínat temnotu." (Konfucius)

www.zxsparrow.com


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Programování v C
PříspěvekNapsal: 03.03.2018, 23:19 
Offline
Radil

Registrován: 27.09.2014, 23:56
Příspěvky: 446
Has thanked: 436 times
Been thanked: 230 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.03.2018, 23:34 
Offline
Pan Generální
Uživatelský avatar

Registrován: 18.06.2013, 20:26
Příspěvky: 2487
Has thanked: 115 times
Been thanked: 424 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"...

_________________
"Je lepší rozsvítit byť jen malou svíčku, než jen proklínat temnotu." (Konfucius)

www.zxsparrow.com


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Programování v C
PříspěvekNapsal: 03.03.2018, 23:43 
Offline
Radil

Registrován: 27.09.2014, 23:56
Příspěvky: 446
Has thanked: 436 times
Been thanked: 230 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.03.2018, 23:50 
Offline
Profík
Uživatelský avatar

Registrován: 31.08.2014, 16:27
Příspěvky: 994
Bydliště: Praha
Has thanked: 63 times
Been thanked: 375 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.03.2018, 23:53 
Offline
Pan Generální
Uživatelský avatar

Registrován: 18.06.2013, 20:26
Příspěvky: 2487
Has thanked: 115 times
Been thanked: 424 times
Jo, už tomu začínám rozumět, díky! :thumbup:

_________________
"Je lepší rozsvítit byť jen malou svíčku, než jen proklínat temnotu." (Konfucius)

www.zxsparrow.com


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

Registrován: 23.03.2014, 20:13
Příspěvky: 2773
Has thanked: 224 times
Been thanked: 601 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é :)

_________________
Plesnivý sýr z Tesca, zatuchlé kuřecí řízky z Albertu, oslizlé hovězí a myší trus z Lidlu.
Nákup potravinářské inspekce v ČR, říjen 2023.


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

Registrován: 31.08.2014, 16:27
Příspěvky: 994
Bydliště: Praha
Has thanked: 63 times
Been thanked: 375 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.08.2018, 11:19 
Offline
Pan Generální
Uživatelský avatar

Registrován: 13.05.2013, 09:15
Příspěvky: 2278
Bydliště: Brno
Has thanked: 842 times
Been thanked: 302 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


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

Registrován: 24.03.2018, 13:37
Příspěvky: 37
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.09.2018, 08:45 
Offline
Pan Generální
Uživatelský avatar

Registrován: 18.06.2013, 20:26
Příspěvky: 2487
Has thanked: 115 times
Been thanked: 424 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:

_________________
"Je lepší rozsvítit byť jen malou svíčku, než jen proklínat temnotu." (Konfucius)

www.zxsparrow.com


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

Registrován: 31.08.2014, 16:27
Příspěvky: 994
Bydliště: Praha
Has thanked: 63 times
Been thanked: 375 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.09.2018, 19:51 
Offline
Óm Nejvyšší

Registrován: 22.05.2013, 21:14
Příspěvky: 3642
Bydliště: Bratislava
Has thanked: 371 times
Been thanked: 788 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ů: 159 ]  Přejít na stránku Předchozí  1, 2, 3, 4, 5, 6, 7 ... 11  Další

Všechny časy jsou v UTC + 1 hodina [ Letní čas ]


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 6 návštevní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