Re: Crash when calling va_arg()

2012-07-05 Thread Greg Parker
On Jul 4, 2012, at 5:44 PM, Fritz Anderson wrote: > On 4 Jul 2012, at 7:40 PM, Charles Srstka wrote: >> Neither method is much foolproof at all — both of them can easily be >> undermined by even low-level fools. > > … as witness the dozens of times a year I crash because I forgot to terminate >

Re: Crash when calling va_arg()

2012-07-04 Thread Nathan Day
For function you can write a macro version of your function which calls, you function and appends a NULL to the VA_ARG macro. I don't normally do this but I have done something similar where I wanted macros to add meta data to a class, that expanded out into compete class method implementations.

Re: Crash when calling va_arg()

2012-07-04 Thread rols
I prefer the NULL sentinel too. You might like to check if __attribute__((sentinel(0,1))) added to your function header gets the compiler to warn you if you forget it, very useful that. > Hi Fritz and Jens, > > It makes total sense now. Out of the two options (NULL sentinel vs a > number to indica

Re: Crash when calling va_arg()

2012-07-04 Thread Tito Ciuro
I think it's easier to place a NULL than having to keep track of the number of args. None of them is foolproof, but placing NULL is all it takes to make it work. One could plug the wrong number of args and boum! Forcing to keep the number in sync is an extra step. -- Tito On Jul 4, 2012, at 5:

Re: Crash when calling va_arg()

2012-07-04 Thread Fritz Anderson
On 4 Jul 2012, at 7:40 PM, Charles Srstka wrote: > Neither method is much foolproof at all — both of them can easily be > undermined by even low-level fools. … as witness the dozens of times a year I crash because I forgot to terminate an +arrayWithObjects: call, or the like. — F

Re: Crash when calling va_arg()

2012-07-04 Thread Charles Srstka
On Jul 4, 2012, at 7:34 PM, Tito Ciuro wrote: > It makes total sense now. Out of the two options (NULL sentinel vs a number > to indicate the number of args), I would choose NULL because out of the two, > it's more foolproof. Is there a consensus about which option is considered > best practice

Re: Crash when calling va_arg()

2012-07-04 Thread Fritz Anderson
Trust your judgment. It is sound in that sending an explicit parameter count is error-prone, as witness the thousands of crashes that occur every day when developers underrun their format strings. — F On 4 Jul 2012, at 7:34 PM, Tito Ciuro wrote: > It makes total sense now. Out of the t

Re: Crash when calling va_arg()

2012-07-04 Thread Tito Ciuro
Hi Fritz and Jens, It makes total sense now. Out of the two options (NULL sentinel vs a number to indicate the number of args), I would choose NULL because out of the two, it's more foolproof. Is there a consensus about which option is considered best practice? Thanks again, -- Tito On Jul 4

Re: Crash when calling va_arg()

2012-07-04 Thread Fritz Anderson
On 4 Jul 2012, at 6:30 PM, Tito Ciuro wrote: > void blockStep(fooBlock firstBlock, ...) > { >va_list args; >va_start(args, firstBlock); >id result = nil; > >do { >result = firstBlock(result, nil); >NSLog(@"%@", result); >} while (nil != (firstBlock = va_arg(arg

Re: Crash when calling va_arg()

2012-07-04 Thread Jens Alfke
On Jul 4, 2012, at 4:30 PM, Tito Ciuro wrote: > This allows it to work without crashing, but I'd like if possible to avoid > having to place the sentinel. Any ideas? There's no way around this, other than perhaps passing in the number of variable arguments as an explicit parameter. The C calli

Crash when calling va_arg()

2012-07-04 Thread Tito Ciuro
Hello, I've hit a wall while experimenting with variadic functions and blocks. The code works pretty well until the second block is executed. After that, it crashes the next time va_arg() gets called. Here's the code: #import typedef id (^fooBlock)(id result, NSError **error); void blockStep(