Variable argument lists

32 отговора 702 прегледа
в отговор на hoopla #21

Re: Variable argument lists

Uz si toleranten, no ne dostatychno.

"Izwrashtawat misleneto" - ne, prosto ti dawat druga perspektiwa, kojato ochevidno ne mozesh da wyzpriemesh.

Отговор
в отговор на *** #22

Re: Variable argument lists

> "Izwrashtawat misleneto" - ne, prosto ti dawat druga perspektiwa, kojato ochevidno ne mozesh da wyzpriemesh.

Заимствах цитата от предишната реплика. Не съм искал да засегна програмистите на тези езици. Всеки трябва да яде и не винаги може да подбира езика, на който да пише за пари.

След тая уговорка мога да кажа, че изброените езици ти пречат в усвояването на "истинските" такива

Отговор
в отговор на hoopla #23

Re: Кой крив, кой прав

<< (operator) vs. printf (function call) - i dwete sa sredstwa na ezika.

napylno sym syglasen che problemyt tuk e smeswane na dwe razlichni biblioteki za I/O i njama nishto obshto s ezika.

Wse edno da kazesh che ne moze da se smeswat razlichni widowe cikli w edna programa, naprimer ako zapochnesh s for(), ne trjabwa da polzwash while().

Отговор
в отговор на Cakaтeka #24

Re: Variable argument lists

Abe kato cjalo, polzwaneto na ... ne e mnogo dobre - ne se wikat copy constructors, njamash type checking - mizeria.
Naprawi go drugojache.
W krajna smetka compile-time nali znaesh broja na argumentite?
1) Naprawi si kolkoto ti trjabwat overloads za razlichen broj argumenti.
2) Naprawi go s wlozeni function calls, naprimer
VarArg("1", VarArg("2", VarArg("3", NULL)));
3) Naprawi go s njakakyw array class i dobawjaj elementite edin po edin.

Отговор
в отговор на hoopla #25

Това май беше за мен

Не се и съмнявам, че всеки език си има мястото, но C++ доста добре надгражда C без да прави компромиси с ефективността, т.е. е една по напреднала технология и мисля, че му е време да замени C. А средствата за абстракция на C++ са несравними с тези на C.

Отговор
в отговор на hoopla #26

Re: Стандарти

spored men daje samo na C++ da si pisal niamash garancii :)
primerno neshta deto s gcc se kompilirat na MS VC++ dawat greshka
pri kompilacia :)

Отговор
в отговор на Cakaтeka #27

Re: Не ми върши работа ...

wse na niakogo triabwa da e izwestna goleminata, a?

Отговор
в отговор на Gonzu #28

Re: Variable argument lists

wseki kakto mu e udobno, no v primera kojto ti dade

VarArg("1", VarArg("2", ... )) - trudno mozhe da bude vlozhen wuw wunshen resurs (text-file ili .RC napravo - kojto sled tova da e za njakolko ezika)

Pri tova

VarArg("1", VarArg("2", ...)) - spored men - e dosta po-trudno chitaemo i razhirjaemo ot dobroto staro printf("%s %d %p...\n", ...) - osven tova printf() construkciata lesno se realizira i pod drugi ezitzi - i stoi kato edin string.

Inache - ne moga da razbera kakvo obshto ima wikaneto na copy constructorite sus "..."?

Taka de - az po princip izbjagwam C++ ako moje - idi me razberi... wuzpolzwam se ot C++ pri encapsuliraneto na funckiite wutre w structurite (klasovete) - no gledam da izbjagwam konstruktori i destruktori, sushto rjadko izpolzwam polimorfizum (no bez nego ponjakoga njama kak....)

tirulirutatuutuu
Отговор
в отговор на malkia #29

Re: Variable argument lists

He-he, sjakash "%s %s" e prilozimo za razlichni ezici - tuk dopuskash che sloworedyt e edin i sysht nawsjakyde, ama ne e taka.

Oswen towa, ti mislish samo w ramkite na printf i stringowe. Njama li drugi obekti koito da mozesh da natypchesh w edin masiw?!

Ami prosto pri podawane na obekt na funkcia kojato priema ... ne se wika copy construktor i ewentualno mozesh mnogo da se omazesh.

Za C++ - to zawisi kakwo pishesh - njama losho da polzwash neshtata koito ti wyrshat rabota.

Отговор
в отговор на Gonzu #30

Re: Variable argument lists

wsushnost "%s %s" go ima dori wuw perl-a, python-a, i wuobshte wsjako neshto koeto mozhe da importne C biblioteka :) - a te sa dosta - i ne e mnogo udobno (bih predpochel %1:s %2:s %0:d - koeto da mozhe i reda da ustanovi ... no...)

Neznam kak ustanovi che mislja wuw ramkite na printf i stringove - ako stava duma za pechat, formatirane na stringove - da, ako e i za nachin na podawane na parametri - togava i da i ne - widjah edna dve realizazii takiva - i gi postnah tuka - i ti wednaga ustanovi che az sum w ramkite na printf i stringove... hmmm... ;)

za neshtata koito ima w C++ e dobre da se izpolzwat - no chesto razni extri wodjat do nesuwmestimost (nie trjabwa 4 kompilatora za razlichni platformi da poddurzhame), bavnotia, golemi i trudni za debugwane EXE-ta (ne debugwame lokalno - a po mrezhata ili kabela - zawisi ot platformata).

Just my 2 cents ;)

tirulirutatuutuu
Отговор
в отговор на malkia #31

Re: Variable argument lists

Izwinjawaj, ako sym te zasegnal s neshto, no goworish predimno za printf.

Otchasti sym syglasen che ... ima njakakwo prilozenie, no az lichno smjatam, che nedostatycite sa poweche ot predimstwata i ne e dobre da se izpolzwa.

Отговор
в отговор на Gonzu #32

Re: Variable argument lists

dobre dawam ti oshte edin primer kudeto printf vliza w po-dobra upotreba ot kakvoto i da bilo drugo (koeto ne e napraveno s edna funkcia)


void someCode( int convergence, int seedValue )
{
MALKIA_PRINT( eDC_NETWORK, "sync seedValue = %d\n", seedValue );
CHUCK_PRINT( eDC_GAMEPLAY, "convergence = %d\n", convergence );

ASSERTMSG( (unsigned)seedValue < 65536, "seedValue greater than 65536 - %d\n", seedValue );
ASSERTMSG( (unsigned)convergence < (unsigned)seedValue, "convergence(%d) greater than seedValue(%d)\n", convergence, seedValue );

..... // some other code
return (convergence + someOtherCode( seedValue )) % convergence;
}


Znachi da kazhem MALKIA_PRINT e funckia kojato samo shte pechata samo pri mene (imame takiva funkcii definirani za wsichki programisti), CHUCK_PRINT - samo pri Chuck i t.nt.k, eDC_SOUND - sa predifirani kanali - kude da pechata

ASSERTMSG ot druga strana shte assertva pri wsichki programisti (sus tzel da hwanem poveche bugove) - no njama da pechata postojanno - zashtoto tova prechi na tehnite logove (OutputWindowa wuw MSVC-to da kazhem).

No pri wse tova iskash ASSERTMSG, MALKIA_PRINT i CHUCK_PRINT da ne rabotjat wuw Release ili Bootable. Emi naj-lesno stava sus 'printf' podobni funckii,

i eto kakvo imame wuw debug headera (debug.hpp) (USER_MALKIA e definirano samo pri mene, pri ostanalite programisti suotwetno - njakakuw drug nickname)



class tDebugPrintManager
{
public:
tDebugPrintManager();
virtual ~tDebugPrintManager();

.....

static void Print( eDEBUG_CHANNEL c, char *szFormatString, ... );
static void AssertPrint( bool bCondition, const char * FILE_NAME, bLong lLineNb, char *szFormatString, ...);
static void EnableChannel( eDEBUG_CHANNEL c ) { abChannels[ c ] = true; }
static void DisableChannel( eDEBUG_CHANNEL c ) { abChannels[ c ] = false; }
void HWBreakpointBootstrap();

....
};

....

inline void PrintStub(eDEBUG_CHANNEL c, char *szFormatString, ... ) {}
inline void AssertStub(...){;};

...

#ifdef USER_MALKIA
#define MALKIA_PRINT tDebugPrintManager::Print
#else
#define MALKIA_PRINT PrintStub
#endif

#ifdef USER_CHUCK
#define CHUCK_PRINT tDebugPrintManager::Print
#else
#define CHUCK_PRINT PrintStub
#endif


...



i sus tozi tool mnogo uspeshno pechatame suobshtenia na ekrana, i lesno razbirame koda na kolegite si, sushto e po stabilen i lesen....

Sega mi napishi sus IOSTREAM, ili po tvoja nachin kak bi pechatal... I nedej izpolzwa printf() podobni funckii...

Imame obshto 468 print() w nashia kod (za wsichki useri) - i 106 ASSERTMSG, 3950 ASSERT-a - ako trjabwashe sus njakoia IOSTREAM-ska funkcia da se realizirat - shteshe da widim goljam zor - no wse pak da widim tvoeto reshenie...

tirulirutatuutuu
Отговор
в отговор на malkia #33

Re: Variable argument lists

E, stiga s tozi printf, de. Daj mi drug primer.
S printf dosta lesno mozesh da predizwikash Access Violation, taka che stabilnostta e mnogo symnitelna.
Naj-lesno - da, syglasen sym. Ama to e naj-lesno i da preskochish ogradata wmesto da zaobikolish i minesh prez wratata.
Kakto i da e. Njama da go prewryshtame w religiozen spor. Zelaja ti uspeh.

Отговор