Builder.cz - Informacni server o programovani

Odběr fotomagazínu

Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!

 

Zadejte Vaši e-mailovou adresu:

Kamarád fotí rád?

Přihlas ho k odběru fotomagazínu!

 

Zadejte e-mailovou adresu kamaráda:



warning pro strdup

Seznam témat     Nová odpověď

Přihlásit se     Registrace     Zapomenuté heslo

Re: warning pro strdup

Autor: Bertoldx

16:41:35 23.11.2009

AnonymousUser Napsal:
-------------------------------------------------------
> V přeložených binárkách od nás ty záměrné chyby
> nejsou, a to je podstatné. Ve všech zakázkách,
> které děláme jsou poskytovány jen hotové binárky
> námi přeložených programů bez zdrojáků. Zdrojáky
> nikomu neposkytujeme. Jediná cesta jak se k nim
> někdo z jiné firmy může dostat je únik.
>
> Pokud si ve zdrojácích vyrábíte záměrné chyby,
> vůbec není jisté, že čas od času neoblbnete i sebe
> samotné a něco do binárky pronikne.
>
> Jsou dvě varianty:
>
> 1) Buď jsou záměrné chyby primitivní, a pak
> průměrný programátor chyby v krátkém čase snadno
> odstraní (viz můj předchozí příspěvek).
>
> 2) A nebo nejsou primitivní, a pak je velké
> riziko, že se do výsledné binárky čas od času
> zapletou, protože jsou natolik komplikované, že
> dávají zabrat i Vám a s velkou pravděpodobností je
> čas od času neuhlídáte ani v binárce.
>
> A výše uvedené body mě nevymluvíte – programuji
> dvacet let. Málokdy jsem takto striktní a
> tvrdohlavý.
>
> Miloslav Ponkrác
> http://ponkrac.net/complex-web-server
> http://ponkrac.net/pisma/

Nejsou primitivní a přesto se ani jednou nestalo, že by pronikly do binárky.

Já sice programuji "jenom" 18 let, ale za tímto si stojím ;).

Citovat příspěvek

 

Re[2]: warning pro strdup

Autor: LadislavZezula

14:49:28 23.11.2009

Odpoved trosku s krizkem po funuse, ale presto si neodpustim upresnit to,
co napsal AnonymousUser:

> Kdysi dávno MS chtěl protlačit svoje safe funkce jako ISO standard C.
> Byl odmítnut, a tak je protlačuje násilím do svého kompilátoru.
> Já jsem ho také odmítnul ve svých zdrojácích.

To je sice pravda, ale s puvodnim dotazem to nesouvisi.
Kompiler chtel, aby programator pouzival "_strdup" misto "strdup".
Obe funkce jsou shodne a ani jedna z nich nema nis spolecneho se safe funkcema.

Viz warning popsany v originalnim dotazu:

"warning C4996: 'strdup': The POSIX name for this item is deprecated.
Instead, use the ISO C++ conformant name: _strdup. See online help
for details."

Myslim ze v tomhle bode MS trochu krivdite, oni se jen snazi,
aby kompiler byl v souladu s ICO C, coz do verze 2005 nebyl.
To, ze _strdup je kompatibilni s normou ISO C, ale strdup neni,
neni chyba Microsoftu a myslim, ze ani nejde o urazenou jesitnost :-)

Podobny warning hlasi i strnicmp - kompiler po mne chce aby
to bylo s podtrzitkem za zacatku - ale proste nahrazeni za
_strnicmp se warningu zbavi.

L.



Příspěvek zaslán emailem

Citovat příspěvek

 

Re: warning pro strdup

Autor: AnonymousUser

14:22:56 23.11.2009

[ital]V přeložených binárkách od nás ty záměrné chyby nejsou, a to je podstatné. Ve všech zakázkách, které děláme jsou poskytovány jen hotové binárky námi přeložených programů bez zdrojáků. Zdrojáky nikomu neposkytujeme. Jediná cesta jak se k nim někdo z jiné firmy může dostat je únik.[/ital]

Pokud si ve zdrojácích vyrábíte záměrné chyby, vůbec není jisté, že čas od času neoblbnete i sebe samotné a něco do binárky pronikne.

Jsou dvě varianty:

1) Buď jsou záměrné chyby primitivní, a pak průměrný programátor chyby v krátkém čase snadno odstraní (viz můj předchozí příspěvek).

2) A nebo nejsou primitivní, a pak je velké riziko, že se do výsledné binárky čas od času zapletou, protože jsou natolik komplikované, že dávají zabrat i Vám a s velkou pravděpodobností je čas od času neuhlídáte ani v binárce.

A výše uvedené body mě nevymluvíte – programuji dvacet let. Málokdy jsem takto striktní a tvrdohlavý.

Miloslav Ponkrác
[url]http://ponkrac.net/complex-web-server[/url]
[url]http://ponkrac.net/pisma/[/url]

Citovat příspěvek

 

Re: warning pro strdup

Autor: Bertoldx

13:05:20 23.11.2009

AnonymousUser Napsal:
-------------------------------------------------------
> Tak teď už chybí jenom jméno firmy, která ve ve
> velmi drahých komerčních projektech záměrné chyby.
> Rádi bychom se jí vyhli...
>
> Mezi námi, to co občas dostanu (zcela legálně)
> za zdrojáky jako zakázku, abych na nich něco upravil
> nebo předělal...

V přeložených binárkách od nás ty záměrné chyby nejsou, a to je podstatné. Ve všech zakázkách, které děláme jsou poskytovány jen hotové binárky námi přeložených programů bez zdrojáků. Zdrojáky nikomu neposkytujeme. Jediná cesta jak se k nim někdo z jiné firmy může dostat je únik.

Citovat příspěvek

 

Re: warning pro strdup

Autor: AnonymousUser

9:48:41 23.11.2009

[ital]Nejpis to nahrazovani fci nic moc k nicemu nevede, bo to neni dost obecny. Na druhy strane to muze s trochou stesti odchytit nakou chybu a usetrit cloveku hafo hledani.[/ital]

Hlavní chyták je ten, že polykání chyb v programech je největší svinstvo.

Nejvíce si časem naběhne ten, kdo to dělá – tedy vývojář. Nikde není řečeno, že useknutím meze v programu zmizela chyba, špatná mez mohla být jen důsledek jiné chyby, která v programu je a řádí dál.

Miloslav Ponkrác

Citovat příspěvek

 

Re: warning pro strdup

Autor: AnonymousUser

9:45:00 23.11.2009

[ital]Tak s tím nesouhlasím. Na firmě to používám běžně i u velmi drahých komerčních
projektů a dokonce schválně s tím, že ve zdrojácích jsou záměrné chyby, které
s jinými překladači nebo bez toho nastavení způsobují chyby za běhu.[/ital]

Tak teď už chybí jenom jméno firmy, která ve ve velmi drahých komerčních projektech záměrné chyby. Rádi bychom se jí vyhli.

[ital]A už se nám párkrát stalo, že se zdrojáky projektu dostaly neoprávněně
ven bez příslušného nastavení v projektu (to mám jen u sebe), a tak s nimi měli
ti kdož to ukradli těžké problémy a díky tomu jsme získali pár lukrativních zakázek[/ital]

Upřímně, každý trochu lepší programátor by s tímto neměl problémy. Pokud Vám zdrojáky ukradli topenáři, tak je to zastaví, to chápu. Nicméně vod pro vás.

Mezi námi, to co občas dostanu (zcela legálně) za zdrojáky jako zakázku, abych na nich něco upravil, nebo předělal – to je vzhledem k tomu, co děláte Vy daleko větší prasečina většinou vzhledem ke kvalitě dnešních rychlokvašených programátorů. Kdybych dostal nic netuše Vaše zdrojáky s Vaší chybou jako zakázku od jiné firmy, byly by spravené ajn cvaj a to bych ani žádné překlapování do safe nepoužil.

[ital]Já ji budu používat i nadále a každému kdo může to doporučuji také.[/ital]

Každý, kdo nepotřebuje dělat v programech záměrné chyby je tato funkce dosti na hovno.

Miloslav POnkrác

Citovat příspěvek

 

Re: warning pro strdup

Autor: Bertoldx

13:23:45 21.11.2009

Maaartin Napsal:
-------------------------------------------------------
> Diky.
>
>> Já bych to doporučoval vypnout globálně v
>> parametrech projektu pro překladač.
>> Tím vůbec nemusíš zasahovat do zdrojáku.
>
> Sice s tim jednoduchym WC mam jen minimalni
> zkusenosti ale osobne bych do nastaveni projektu
> nic nepsal co neni nutny. Zkousel jsem ho totiz
> vyssi verzi prekladace a ze pry se projet musi
> zkonvertovat. Toz konvertuj... jenomze pri
> konvertovani pokazdy zhebnul. Takze cokoliv napisu
> do nastaveni, musim pak dohledat a opsat ruco.
> NETVRDIM ze to nejde lepe (a pokud jo, tak mi
> nemusite psat jak; ted to nepouziju), ani NETVRDIM
> ze se to stava pokazdy, ja jen davam prednost
> citelny a prohledavatelny reprezentaci cehokoliv.
>
> Ja NETVRDIM ze to nejde lepe (a pokud jo, tak mi
> nemusite psat jak; ted to nepouziju), ani NETVRDIM
> ze se to stava pokazdy, ja jen davam prednost
> citelny a prohledavatelny reprezentaci cehokoliv.
>

Mě to vůbec nevadí a i přes tyhle občasné problémy je pro mě přijatelnější to používat
než nepoužívat a mít to v nastavení projektu spíš než ve zdrojáku.

>>
>> Ale jak říkám, pokud potřebujete něco dolepit
>> a mít klid, a dostanete za to 30,50 Kč a lízátko,
>> je řešení ms dobré.
>>

Tak s tím nesouhlasím. Na firmě to používám běžně i u velmi drahých komerčních
projektů a dokonce schválně s tím, že ve zdrojácích jsou záměrné chyby, které
s jinými překladači nebo bez toho nastavení způsobují chyby za běhu.
A už se nám párkrát stalo, že se zdrojáky projektu dostaly neoprávněně
ven bez příslušného nastavení v projektu (to mám jen u sebe), a tak s nimi měli
ti kdož to ukradli těžké problémy a díky tomu jsme získali pár lukrativních zakázek,
které by nám jinak vyfouknul někdo jiný. Takže nám se použití téhle finty fakt vyplatilo.
Já ji budu používat i nadále a každému kdo může to doporučuji také.

Citovat příspěvek

 

Re: warning pro strdup

Autor: Maaartin

3:58:44 21.11.2009

Diky.

> [ital]Já bych to doporučoval vypnout globálně v parametrech projektu pro překladač.
Tím vůbec nemusíš zasahovat do zdrojáku.[/ital]

Sice s tim jednoduchym WC mam jen minimalni zkusenosti ale osobne bych do nastaveni projektu nic nepsal co neni nutny. Zkousel jsem ho totiz vyssi verzi prekladace a ze pry se projet musi zkonvertovat. Toz konvertuj... jenomze pri konvertovani pokazdy zhebnul. Takze cokoliv napisu do nastaveni, musim pak dohledat a opsat ruco. Ja NETVRDIM ze to nejde lepe (a pokud jo, tak mi nemusite psat jak; ted to nepouziju), ani NETVRDIM ze se to stava pokazdy, ja jen davam prednost citelny a prohledavatelny reprezentaci cehokoliv.


> [ital]Jinak daleko víc bych ocenil náhradu funkcí, která by byla safe, a v případě nesouladu s rozměry pole by mi to ohlásil (assert, výjimka), abych to mohl opravit.[/ital]

No, to by bylo super, to uz by v tomhle nahradilo valgrind. Jenomze jenom v tomhle.

Nejpis to nahrazovani fci nic moc k nicemu nevede, bo to neni dost obecny. Na druhy strane to muze s trochou stesti odchytit nakou chybu a usetrit cloveku hafo hledani.


> [ital]Ale jak říkám, pokud potřebujete něco dolepit a mít klid, a dostanete za to 30,50 Kč a lízátko, je řešení ms dobré.[/ital]

Ale kdybych si mel vybrat mezi horou lizatek a moznosti to nepouzivat, tak bych to nepouzival.

Citovat příspěvek

 

Re: warning pro strdup

Autor: AnonymousUser

1:15:03 20.11.2009

Já budu věčnej rejpal, ale řešení MS s náhradou za safe funkce je polovičaté a může způsobit víc škody, než užitku. Ale uznávám, že pokud nemáte čas, nebo vám nechtějí moc platit, případně potřebujete hromadně zpracovat cizí zdoják, může se to hodit.

Jinak daleko víc bych ocenil náhradu funkcí, která by byla safe, a v případě nesouladu s rozměry pole by mi to ohlásil (assert, výjimka), abych to mohl opravit.

Ale jak říkám, pokud potřebujete něco dolepit a mít klid, a dostanete za to 30,50 Kč a lízátko, je řešení ms dobré.

Miloslav Ponkrác
[url]http://ponkrac.net/complex-web-server[/url]
[url]http://ponkrac.net/pisma/[/url]

Citovat příspěvek

 

Re: warning pro strdup

Autor: Bertoldx

18:21:41 19.11.2009

AnonymousUser Napsal:
-------------------------------------------------------
> Vřele doporučuji Deprecated warning na začátku zdrojáku
> vypnout a zcela na něho zapomenout...
> ...A nebo jej vypněte v konfiguraci Vašeho projektu...

Já bych to doporučoval vypnout globálně v parametrech projektu pro překladač.
Tím vůbec nemusíš zasahovat do zdrojáku.

Definice "_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 1", která umožňuje náhradu funkcí jenom překladem beze změny názvu funkcí ve zdrojáku se ovšem může hodit. Když se to použije globálně v nastavení parametrů projektu pro překladač a v kombinaci s tím globálním vypnutím Deprecated warningu, tak by to mohlo být i použitelné.

Zdrojáky tak můžou zůstat beze změn tj. s funkcemi jako gets, memcpy, memmove, scanf, sscanf, strcat, strcpy atd., ale překladač je bude automaticky kde to bude možné nahrazovat za funkce gets_s, memcpy_s, memmove_s, scanf_s, sscanf_s, strcat_s, strcpy_s atd. Zdroják se tak vůbec nezmění a přenositelnost tím zůstane s tím, že přeložením Microsoftím překladačem to bude o něco bezpečnější.

Citovat příspěvek

 

Re: warning pro strdup

Autor: AnonymousUser

15:58:24 19.11.2009

Já bych řekl takto. Deprecated warning je čistě neužitečný a kromě vtírávých informací o úmyslech Velkého Vezíra v Microsoftu programátorovi nedává nic, než zdržování. Nemá smysl jen vypínat jen pro část zdrojáku, informace, který warning dává je pro programátora jen vata k ničemu.

Vřele doporučuji jej na začátku zdrojáku vypnout a zcela na něho zapomenout. Tento warning nemá sebemenší smysl. Nikterak s ním neuděláte přenositelný program, protože deprecated warning Vám doporučuje většinou obecně nepřenositelné, ale Microsoftu se líbící funkce, které kromě Microsoftího překladače většinou nikde nenajdete.

Nevidím sebemenší důvod, proč jej mít zapnutý. Pokud máte společný hlavičkový soubor v projektu, vypněte jej tam. Případně jej vypněte na začátku každého zdrojového kódu. A nebo jej vypněte v konfiguraci Vašeho projektu.

Miloslav Ponkrác
[url]http://ponkrac.net/complex-web-server[/url]
[url]http://ponkrac.net/pisma/[/url]

Citovat příspěvek

 

Re: warning pro strdup

Autor: JiriValerian

9:06:51 19.11.2009

[color=#008000]Maaartin Napsal:
-------------------------------------------------------
> _CRT_NONSTDC_NO_DEPRECATE je ok, neslo by to
> ale selektivne (abych si nevypnul toho prilis)?[/color]

[size=20px][color=#000080][b]Možnosti jsou jen následující[/b][/color][/size]

[b]1. #pragma warning( disable : 4996 )[/b]
Vypne všechny hlášky [b]C4996[/b].

[b]2. #define _CRT_NONSTDC_NO_DEPRECATE[/b]
Vypne hlášky [b]C4996[/b] pro funkce viz tabulka [b]Deprecated POSIX functions[/b]
(mezi ty funkce patří např. [b]strdup[/b]) na stránce viz odkaz:
http://msdn.microsoft.com/en-us/library/ms235384(VS.80).aspx

[b]3. #define _CRT_SECURE_NO_WARNINGS[/b]
Vypne hlášky [b]C4996[/b] pro funkce viz tabulka [b]Security-enhanced functions[/b]
(mezi ty funkce patří např. [b]strcpy[/b]) na stránce viz odkaz:
http://msdn.microsoft.com/en-us/library/ms235384(VS.80).aspx

[b]4. #define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 1[/b]
Pro funkce viz tabulka [b]Functions with Secure Template Overloads[/b]
(mezi ty funkce patří např. [b]strcpy[/b]) na stránce viz odkaz:
http://msdn.microsoft.com/en-us/library/ms235384(VS.80).aspx
v případě staticky alokovaného bafru uvnitř bloku [b]{...}[/b] kde je použita příslušná funkce
nebo je-li staticky alokovaný bafr globální (nepředávaný ukazatelem přes parametr),
nahrazuje překladač tzv. nebezpečnou funkci za tzv. bezpečnou, a to bez nutnosti změny názvu
funkce ve zdrojáku viz příklady. Je-li nahrazení provedeno není generováno varování [b]C4996[/b].

[hr][size=14px][code][color=#0000FF]#include[/color] [color=#800080][/color]
[color=#0000FF]#include[/color] [color=#800080][/color]

[color=#0000FF]int[/color] main[color=#800000]([/color][color=#0000FF]void[/color][color=#800000])[/color]
[color=#800000]{[/color]
[color=#0000FF]char[/color] szBuf[color=#800000][[/color][color=#0000FF]10[/color][color=#800000]][/color][color=#800000];[/color]
strcpy[color=#800000]([/color]szBuf[color=#800000],[/color] [color=#800080]"test"[/color][color=#800000])[/color][color=#800000];[/color]
printf[color=#800000]([/color][color=#800080]"%s\n"[/color][color=#800000],[/color]szBuf[color=#800000])[/color][color=#800000];[/color]
[color=#0000FF]return[/color] [color=#0000FF]0[/color][color=#800000];[/color]
[color=#800000]}[/color][color=#800000];[/color][/code][/size][b]warning C4996: 'strcpy':
This function or variable may be unsafe. Consider using strcpy_s instead.
To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/b]

[hr][size=14px][code][color=#0000FF]#pragma[/color] warning[color=#800000]([/color] disable [color=#800000]:[/color] [color=#0000FF]4996[/color] [color=#800000])[/color]

[color=#0000FF]#include[/color] [color=#800080][/color]
[color=#0000FF]#include[/color] [color=#800080][/color]

[color=#0000FF]int[/color] main[color=#800000]([/color][color=#0000FF]void[/color][color=#800000])[/color]
[color=#800000]{[/color]
[color=#0000FF]char[/color] szBuf[color=#800000][[/color][color=#0000FF]10[/color][color=#800000]][/color][color=#800000];[/color]
strcpy[color=#800000]([/color]szBuf[color=#800000],[/color] [color=#800080]"test"[/color][color=#800000])[/color][color=#800000];[/color]
printf[color=#800000]([/color][color=#800080]"%s\n"[/color][color=#800000],[/color]szBuf[color=#800000])[/color][color=#800000];[/color]
[color=#0000FF]return[/color] [color=#0000FF]0[/color][color=#800000];[/color]
[color=#800000]}[/color][color=#800000];[/color][/code][/size]Bez warningu. Překladač použije funkci [b]strcpy[/b].

[hr][size=14px][code][color=#0000FF]#define[/color] _CRT_SECURE_NO_WARNINGS

[color=#0000FF]#include[/color] [color=#800080][/color]
[color=#0000FF]#include[/color] [color=#800080][/color]

[color=#0000FF]int[/color] main[color=#800000]([/color][color=#0000FF]void[/color][color=#800000])[/color]
[color=#800000]{[/color]
[color=#0000FF]char[/color] szBuf[color=#800000][[/color][color=#0000FF]10[/color][color=#800000]][/color][color=#800000];[/color]
strcpy[color=#800000]([/color]szBuf[color=#800000],[/color] [color=#800080]"test"[/color][color=#800000])[/color][color=#800000];[/color]
printf[color=#800000]([/color][color=#800080]"%s\n"[/color][color=#800000],[/color]szBuf[color=#800000])[/color][color=#800000];[/color]
[color=#0000FF]return[/color] [color=#0000FF]0[/color][color=#800000];[/color]
[color=#800000]}[/color][color=#800000];[/color][/code][/size]Bez warningu. Překladač použije funkci [b]strcpy[/b].

[hr][size=14px][code][color=#0000FF]#define[/color] _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES [color=#0000FF]1[/color]

[color=#0000FF]#include[/color] [color=#800080][/color]
[color=#0000FF]#include[/color] [color=#800080][/color]

[color=#0000FF]int[/color] main[color=#800000]([/color][color=#0000FF]void[/color][color=#800000])[/color]
[color=#800000]{[/color]
[color=#0000FF]char[/color] szBuf[color=#800000][[/color][color=#0000FF]10[/color][color=#800000]][/color][color=#800000];[/color]
strcpy[color=#800000]([/color]szBuf[color=#800000],[/color][color=#800080]"test"[/color][color=#800000])[/color][color=#800000];[/color]
printf[color=#800000]([/color][color=#800080]"%s\n"[/color][color=#800000],[/color]szBuf[color=#800000])[/color][color=#800000];[/color]
[color=#0000FF]return[/color] [color=#0000FF]0[/color][color=#800000];[/color]
[color=#800000]}[/color][color=#800000];[/color][/code][/size]Je-li bafr alokován tzv. staticky uvnitř bloku { ... } v němž je použita funkce [b]strcpy[/b]
pak i když je ve zdrojáku použita funkce [b]strcpy[/b] překladač díky definici
[b]#define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 1[/b]
použije funkci [b]strcpy_s[/b] jako by bylo napsáno:
[size=14px][code][color=#0000FF]char[/color] szBuf[color=#800000][[/color][color=#0000FF]10[/color][color=#800000]][/color][color=#800000];[/color]
strcpy_s[color=#800000]([/color]szBuf[color=#800000],[/color][color=#0000FF]10[/color][color=#800000],[/color][color=#800080]"test"[/color][color=#800000])[/color][color=#800000];[/color][/code][/size]a není při tom generováno varování.

[hr][size=14px][code][color=#0000FF]#define[/color] _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES [color=#0000FF]1[/color]

[color=#0000FF]#include[/color] [color=#800080][/color]
[color=#0000FF]#include[/color] [color=#800080][/color]
[color=#0000FF]#include[/color] [color=#800080][/color]

[color=#0000FF]int[/color] main[color=#800000]([/color][color=#0000FF]void[/color][color=#800000])[/color]
[color=#800000]{[/color]
[color=#0000FF]char[/color] [color=#800000]*[/color]szBuf [color=#800000]=[/color] [color=#800000]([/color][color=#0000FF]char[/color] [color=#800000]*[/color][color=#800000])[/color]malloc[color=#800000]([/color][color=#0000FF]10[/color][color=#800000])[/color][color=#800000];[/color]
strcpy[color=#800000]([/color]szBuf[color=#800000],[/color] [color=#800080]"test"[/color][color=#800000])[/color][color=#800000];[/color]
printf[color=#800000]([/color][color=#800080]"%s\n"[/color][color=#800000],[/color]szBuf[color=#800000])[/color][color=#800000];[/color]
free[color=#800000]([/color]szBuf[color=#800000])[/color][color=#800000];[/color]
[color=#0000FF]return[/color] [color=#0000FF]0[/color][color=#800000];[/color]
[color=#800000]}[/color][color=#800000];[/color][/code][/size][b]warning C4996: 'strcpy':
This function or variable may be unsafe. Consider using strcpy_s instead.
To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/b]

Vzhledem k tomu, že zde je bafru alokován dynamicky tak překladač nenahradil [b]strcpy[/b] za [b]strcpy_s[/b]
a tudíž bylo generováno varování, které by šlo vypnout použitím např.
[b]#define _CRT_SECURE_NO_WARNINGS[/b]
[hr]
Další možnost je vypnout varování [b]C4996[/b] jen pro určitou část zdrojáku,
třeba pro blok řádků nebo jenom pro jeden řádek, na kterém je volána příslušná funkce.
[size=14px][code][color=#0000FF]#include[/color] [color=#800080][/color]
[color=#0000FF]#include[/color] [color=#800080][/color]

[color=#0000FF]int[/color] main[color=#800000]([/color][color=#0000FF]void[/color][color=#800000])[/color]
[color=#800000]{[/color]
[color=#0000FF]char[/color] szBuf[color=#800000][[/color][color=#0000FF]10[/color][color=#800000]][/color][color=#800000];[/color]

[color=#0000FF]#pragma[/color] warning[color=#800000]([/color] disable [color=#800000]:[/color] [color=#0000FF]4996[/color] [color=#800000])[/color]
strcpy[color=#800000]([/color]szBuf[color=#800000],[/color] [color=#800080]"test"[/color][color=#800000])[/color][color=#800000];[/color]
[color=#0000FF]#pragma[/color] warning[color=#800000]([/color] [color=#0000FF]default[/color] [color=#800000]:[/color] [color=#0000FF]4996[/color] [color=#800000])[/color]

printf[color=#800000]([/color][color=#800080]"%s\n"[/color][color=#800000],[/color]szBuf[color=#800000])[/color][color=#800000];[/color]
[color=#0000FF]return[/color] [color=#0000FF]0[/color][color=#800000];[/color]
[color=#800000]}[/color][color=#800000];[/color][/code][/size]

Citovat příspěvek

 

Re: warning pro strdup

Autor: AnonymousUser

3:05:50 19.11.2009

Ad 1) strdup je součástí POSIXu. Nejde o přenositelnost, můžete použít mnoho funkcí ze standardní knihovny, které jsou nepřenositelné, ale deprecated nejsou. Prostě to, že není v ANSI C je jen zástěrka, aby lidi moc neprotestovali.

Ad 2) warningy člověka zajímají, protože mohou obsahovat důležité upozornění. právě warning o deprecated MS poněkud značně přehnal. jako deprecated je půlka ANSI C knihovny podle MS, a že náhodou strdup není v ANSI C jen zneužívá na obhajobu. Jako deprecated prostě označuje cokoli z jakékoli normy prostě tak jak se mu to líbí. Znovu říkám, hlavním důvodem je uražená ješitnost, že mu jaho safe funkce neschválilo ISO.

Ad 3) MS má dost dobrý kompilátor. Já doufám, že jeho excesy budou vypnutelné. VS je fakt dobrý překladač. Zatím mě štve jen excesy typu deprecated, excesy typu protestujeme proti přetečení konstantního výrazu, a excesem nejsme schopní spočítat NaN jako konstatní výraz a excesem nepodporujeme 80 bitové float. Exces zrušili jsme __int128 z VS6 mě nechává chladným a exces neumíme inline asm v 64 bit verzi mě začne štvát až budu mít 64bitové Windows, což zatím jedu na bezpečných Windows XP.

Přestože na MS nadávám, mám ho docela rád. Kompilátor mají jeden z nejlepších, zadarmo a mě MS vcelku jinak rozmazluje. Výše zmíněné excesy nejsou nic strašného. A já to s kritikou taky čas od času značně přeháním.

Miloslav Ponkrác
[url]http://ponkrac.net/complex-web-server[/url]
[url]http://ponkrac.net/pisma/[/url]

Citovat příspěvek

 

Re: warning pro strdup

Autor: Maaartin

1:40:14 19.11.2009

ad 1. Hmmm, ok, vem ju cert.

ad 2. Samozrejme ze scu, sice me prenositelnost nezajima ani trosku (kdyby to mohlo byt prenositelny tak bych to uz davno psal v necem jinym). Ignorovat neni nikdy dobre, bo se neco muze prehlidnout. Ten _CRT_NONSTDC_NO_DEPRECATE je ok, neslo by to ale selektivne (abych si nevypnul toho prilis)?

ad 3. Pevne doufam, ze az bude strdup m$ vypusten, tak me to nebude zajimat ani v nejmensim. Kdyby bylo treba najit nekoho na svrzeni do ohnive pece, tak bych vedel.

A diky.

Citovat příspěvek

 

Re: warning pro strdup

Autor: JiriValerian

21:30:10 18.11.2009

[color=#008000]Maaartin Napsal:
-------------------------------------------------------
> Diky ale furt mi to nedoslo. Zrovna u strdup
> nevidim zadny problem, kdyz se divam na
> http://msdn.microsoft.com/en-us/library/y471khhc(V
> S.80).aspx
> tak nevidim nic zvlastniho. Porovnat s jejich
> strdup to nemuzu, bo na
> http://msdn.microsoft.com/en-us/library/ms235454(VS.80).aspx
> radsi nic nepisou. Ale zni to uplne stejne jako
> http://linux.die.net/man/3/strdup
>
> Nasel jsem k tomu hezky komentar:
> This is just Visual Studio's way of saying, "We
> don't like you writing cross-platform code."
>[/color]

[b]1.[/b] Funkce [b]strdup[/b] není ani součástí [b]ANSI C[/b].

[b]2.[/b] Vzhledem k tomu, že se jedná pouze o [b]warning[/b] tak nemá smysl o tom diskutovat.
Kdo chce může stále použít [b]strdup[/b] a varování si vypnout nebo jej ignorovat.

K vypnutí deprecated varování obecně stačí použít definici:
[b]#define _CRT_NONSTDC_NO_DEPRECATE[/b]

[b]3.[/b] Pláč a skřípění zubů si ponechte na dobu, až bude [b]strdup[/b] zcela vypuštěn
a namísto [b]warning[/b] z toho bude [b]error[/b] ;).

Citovat příspěvek

 

Re: warning pro strdup

Autor: Maaartin

20:55:12 18.11.2009

Diky ale furt mi to nedoslo. Zrovna u strdup nevidim zadny problem, kdyz se divam na
http://msdn.microsoft.com/en-us/library/y471khhc(VS.80).aspx
tak nevidim nic zvlastniho. Porovnat s jejich strdup to nemuzu, bo na
http://msdn.microsoft.com/en-us/library/ms235454(VS.80).aspx
radsi nic nepisou. Ale zni to uplne stejne jako
http://linux.die.net/man/3/strdup

Nasel jsem k tomu hezky komentar:
This is just Visual Studio's way of saying, "We don't like you writing cross-platform code."

Citovat příspěvek

 

Re: warning pro strdup

Autor: AnonymousUser

20:53:58 18.11.2009

Nejlepší je být kritický k Microsoftům, kteří hodlají vnutit vůli celému světu.

Každý svůj zdroják začínám zakázáním warningu o deprecated a nad tím je komentář, do kterého jsem nacpal všechna sprostá slova, co jsem v angličtině znal. Pravda, dnes jich znám daleko více, takže začátek zdrojáku mě potěší také tím, jaké pokroky v angličtině jsem udělal. :-)

Jinak příběh je jednoduchý:

Kdysi dávno MS chtěl protlačit svoje safe funkce jako ISO standard C. Byl odmítnut, a tak je protlačuje násilím do svého kompilátoru. Já jsem ho také odmítnul ve svých zdrojácích.

Od té doby houfně označuje jako deprecated co mu přijde pod ruku.

Miloslav Ponkrác
[url]http://ponkrac.net/complex-web-server[/url]
[url]http://ponkrac.net/pisma/[/url]

Citovat příspěvek

 

Re: warning pro strdup

Autor: JiriValerian

20:38:32 18.11.2009

[color=#008000]Maaartin Napsal:
-------------------------------------------------------
> Proc mi jednoduchy wc pise tenhle
>
> warning C4996: 'strdup': The POSIX name for this
> item is deprecated. Instead, use the ISO C++
> conformant name: _strdup. See online help for
> details.
>
> a v cem ma byt _strdup lepsi?
>
> Nebylo by __strdup jeste lepsi? :D[/color]

[b]Why is strdup() deprecated[/b]
http://msdn.microsoft.com/en-us/library/ttcz0bys(VS.80).aspx

Citovat příspěvek

 

warning pro strdup

Autor: Maaartin

20:16:42 18.11.2009

Proc mi jednoduchy wc pise tenhle

warning C4996: 'strdup': The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: _strdup. See online help for details.

a v cem ma byt _strdup lepsi?

Nebylo by __strdup jeste lepsi? :D

Citovat příspěvek

 

 

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: