C functions support an arbitrary number of arguments?

PHP has func_get_args()functions to get all the arguments, and JavaScript has an object functions.

I wrote very simple max()in C

int max(int a, int b) {

    if (a > b) {
        return a;   
    } else {
        return b;
    }
}

I am sure that in most languages ​​you can provide any number of arguments in their built-in max()(or equivalent). Can you do it in C?

I thought this question might have been what I wanted, but I don’t think so.

Please keep in mind I'm still studying. :)

Many thanks.

+3
source share
7 answers

You can write a variable argument function that takes a number of arguments, for example

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

int sum(int numArgs, ...)
{
    va_list args;
    va_start(args, numArgs);

    int ret = 0;

    for(unsigned int i = 0; i < numArgs; ++i)
    {
        ret += va_arg(args, int);
    }    

    va_end(args);

    return ret;
}    

int main()
{
    printf("%d\n", sum(4,  1,3,3,7)); /* prints 14 */
}

, (. va_arg).

+10

, C , , printf() .

:

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

static int myMax (int quant, ...) {
    va_list vlst;
    int i;
    int num;
    int max = INT_MIN;

    va_start (vlst, quant);

    for (i = 0; i < quant; i++) {
        if (i == 0) {
            max = va_arg (vlst, int);
        } else {
            num = va_arg (vlst, int);
            if (num > max) {
                max = num;
            }
        }
    }
    va_end (vlst);
    return max;
}

int main (void) {
    printf ("Maximum is %d\n", myMax (5, 97, 5, 22, 5, 6));
    printf ("Maximum is %d\n", myMax (0));
    return 0;
}

:

Maximum is 97
Maximum is -2147483648

quant. , : (5), .

, NULL . max , .

printf , . , % , .

+5

. C99 , C :

  • 127
  • 127

, , , C99 . ... . stdarg.h.

+3

, varargs c ` `varargs '<

va_args , . , 0-n . , 2 ,

+2

, variadic C. , , printf,

int printf(const char *format, ...);

... , , .

, va_start, va_arg , , stdarg.h. .

, , "" ​​. , printf , . , , .

printf("%d");
+1

- , main(). :

int myfunc(type* argarray, int argcount);

+1

C , .

: printf()

printf("Hello World\n");
printf("%s\n", "Hello World");
printf("%d + %d is %d\n", 2, 2, 2+2);

max, , , .

<stdarg.h> va_list, va_start, va_arg va_end, .

http://www.kernel.org/doc/man-pages/online/pages/man3/stdarg.3.html

0
source

Source: https://habr.com/ru/post/1763994/


All Articles