| Deutsch English Français Italiano |
|
<lhbj12Fmur8U1@mid.uni-berlin.de> View for Bookmarking (what is this?) Look up another Usenet article |
Path: ...!feeds.phibee-telecom.net!2.eu.feeder.erje.net!feeder.erje.net!fu-berlin.de!uni-berlin.de!not-for-mail
From: ram@zedat.fu-berlin.de (Stefan Ram)
Newsgroups: comp.lang.c
Subject: Re: is it possible to have functions with 0, 1, or 2 args?
Date: 5 Aug 2024 09:06:42 GMT
Organization: Stefan Ram
Lines: 46
Expires: 1 Jul 2025 11:59:58 GMT
Message-ID: <lhbj12Fmur8U1@mid.uni-berlin.de>
References: <7q-dnbTDU4oBES37nZ2dnZfqnPednZ2d@brightview.co.uk>
Mime-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-Trace: news.uni-berlin.de G2pQCYPAS7CaVow6V9hBpQxsk7EHmyfHYt0BOO/lQREsIr
Cancel-Lock: sha1:H9/UhSU6kOZuPJkCIf1WVco3BKM= sha256:t3OHSZAWw0Z41rbi45N9NiHrn2XPbO0yQCHAeHEzLBw=
X-Copyright: (C) Copyright 2024 Stefan Ram. All rights reserved.
Distribution through any means other than regular usenet
channels is forbidden. It is forbidden to publish this
article in the Web, to change URIs of this article into links,
and to transfer the body without this notice, but quotations
of parts in other Usenet posts are allowed.
X-No-Archive: Yes
Archive: no
X-No-Archive-Readme: "X-No-Archive" is set, because this prevents some
services to mirror the article in the web. But the article may
be kept on a Usenet archive server with only NNTP access.
X-No-Html: yes
Content-Language: en-US
Bytes: 3232
Mark Summerfield <mark@qtrac.eu> wrote or quoted:
>The rational is that I'd like to create a function `new_thing()` which
>takes an optional size, e.g.,
I'm hella stoked on writing code that's chill in C. So,
in a sitch like this, I might roll with a function that's
/always/ down to take an argument and just hit it with a
"-1" if I'm not trying to lock down a size.
The "va_list" jazz in C, courtesy of the <stdarg.h> header, lets
functions roll with a flexible number of args. It's like a buffet
line for arguments, where you can scoop them up one by one using
those gnarly macros "va_start", "va_arg", and "va_end".
But here's the rub - the function's not psychic, so it can't just
divine how many args are coming down the pike. You got to clue it in
somehow, like passing a head count or dropping a hint about where to
pump the brakes. The coder doesn't have to play bean counter though;
he could just slap a "Dead End" sign at the tail of the arg parade!
main.c
#include <stdio.h>
#include <stdarg.h>
int f( int const n, ... )
{ va_list args; /* to hold the variable arguments */
va_start( args, n ); /* Initialize the "va_list" variable with the */
int result; /* variable arguments, starting after n */
switch( n )
{ case 0: result = f( 2, 3, 11 ); break;
/* va_arg(args, int) retrieves the next argument from the "va_list"
of type "int" */
case 1: result = f( 2, 3, va_arg( args, int )); break;
case 2:
result = va_arg( args, int )+ va_arg( args, int ); break; }
va_end( args ); /* Clean up the "va_list" */
return result; }
int main( void )
{ printf
( "%d\n", 14 == f( 0 )&& 8 == f( 1, 5 )&& 11 == f( 2, 2, 9 )); }
transcript
1