9

Can we pass variable number of arguments to a function in c?

Potatoswatter
  • 134,909
  • 25
  • 265
  • 421
Shweta
  • 5,198
  • 11
  • 44
  • 58

5 Answers5

11

Here is an example:

#include <stdlib.h>
#include <stdarg.h>
#include <stdio.h>

int maxof(int, ...) ;
void f(void);

int main(void){
        f();
        exit(EXIT SUCCESS);
}

int maxof(int n_args, ...){
        register int i;
        int max, a;
        va_list ap;

        va_start(ap, n_args);
        max = va_arg(ap, int);
        for(i = 2; i <= n_args; i++) {
                if((a = va_arg(ap, int)) > max)
                        max = a;
        }

        va_end(ap);
        return max;
}

void f(void) {
        int i = 5;
        int j[256];
        j[42] = 24;
        printf("%d\n", maxof(3, i, j[42], 0));
}
Jonathan Leffler
  • 730,956
  • 141
  • 904
  • 1,278
Preet Sangha
  • 64,563
  • 18
  • 145
  • 216
  • 1
    I don't get the use of the `register` here? – haroldcampbell Dec 09 '11 at 21:25
  • The use of `register` is evidence that the code sample is quite old. Use of `register` is a hint to the compiler to place the variable into a machine register, as a performance optimisation. The majority of C compilers over the last 30 years have ignored that hint, since they can do a better job of register allocation than most programmers can. Nowadays, `register` has few effects other than forbidding calculation of the address of a variable. – Peter Jul 21 '17 at 13:44
6

If it is a function that accepts a variable number of arguments, yes.

James McNellis
  • 348,265
  • 75
  • 913
  • 977
0

Yes, if the function accepts variable arguments. If you need to make your own variable-argument function, there are macros that begin with va_ which give you access to the arguments.

Alexander Rafferty
  • 6,134
  • 4
  • 33
  • 55
0

make sure that the variable argument list should always be at the end of the argument list

example: void func(float a, int b, ...) is correct

but void func(float a, ..., int b) is not valid

Anji
  • 725
  • 1
  • 9
  • 27
  • Yes, but this is more of a comment than an answer. Certainly, you've explained one aspect, but it is a very minor aspect of the answer. – Jonathan Leffler Jul 21 '17 at 13:33
0

"You should consider that using variadic functions (C-style) is a dangerous flaw," says Stephane Rolland. You can find his helpful post here.

Community
  • 1
  • 1
Rose Perrone
  • 61,572
  • 58
  • 208
  • 243
  • 1
    I believe the advice is for writing your own custom variadic functions in C++ and not for the ones provided by the standard library. Just, imagine life without `printf`! – Alok Save Nov 27 '11 at 04:50