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
>
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.
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
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:
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
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
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
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
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
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
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(
11 matches
Mail list logo