В этом примере ниже я хотел бы перейти к функции, которая получает переменное количество аргументов в содержимом массива.вызов функции vararg с массивом?
В других терминах я хотел бы передать printf
содержание foo
по значению и, таким образом, передать эти аргументы в стек.
#include <stdarg.h>
#include <stdio.h>
void main()
{
int foo[] = {1,2,3,4};
printf("%d, %d, %d, %d\n", foo);
}
Я знаю, что этот пример выглядит глупо, потому что я могу использовать printf("%d, %d, %d, %d\n", 1,2,3,4);
. Только представьте, я звоню void bar(char** a, ...)
вместо этого и массив что-то я получаю от RS232 ...
EDIT
Другими словами, я хотел бы избежать этого:
#include <stdarg.h>
#include <stdio.h>
void main()
{
int foo[] = {1,2,3,4};
switch(sizeof(foo))
{
case 1: printf("%d, %d, %d, %d\n", foo[0]); break;
case 2: printf("%d, %d, %d, %d\n", foo[0], foo[1]); break;
case 3: printf("%d, %d, %d, %d\n", foo[0], foo[1], foo[2]); break;
case 4: printf("%d, %d, %d, %d\n", foo[0], foo[1], foo[2], foo[3]); break;
...
}
}
Нет, это невозможно. Если у вас есть массив, вам нужно вызвать функцию, которая может обрабатывать переданный массив.В случае вашего простого примера вам нужно создать функцию-оболочку, которая принимает массив как аргумент и петли над массивом и в свою очередь вызывает 'printf'. –
Размер массива известен только в том случае, если он был создан статически! Если вы хотите передать массив функции, вы должны определить элемент хвоста или передать количество элементов в функцию. – jboockmann
Создайте [свой собственный printf] (http://stackoverflow.com/questions/16647278/minimal-fast-implementation-of-sprintf-for-embedded). Во время обработки вы поймете, где проблема с этим вопросом! – imbearr