Cuando ejecuté el siguiente programa en el sistema Linux, no puedo obtener la respuesta esperada "9". Pero puedo obtenerlo en el sistema de Windows.
¿Por qué pasó esto?
#include <stdio.h> int sum(int num, ...){ int* p = &num + 1; int res = 0; while(num--){ res += *p++; } return res; } int main(){ printf("%d\n", sum(3,2,3,4)); return 0; }Lo depuré en GDB, como se muestra a continuación: ingrese la descripción de la imagen aquí
La configuración de mi sistema se encuentra a continuación.
Linux versión 5.11.0-41-generic (buildd@lgw01-amd64-005) (gcc (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0, GNU ld (GNU Binutils para Ubuntu) 2.34)
Debe usar las macros definidas en el encabezado <stdarg.h> .
Aquí estás.
#include <stdio.h> #include <stdarg.h> long long int sum( size_t n, ... ) { long long int result = 0; va_list ap; va_start( ap, n ); while (n--) { result += va_arg( ap, int ); } va_end( ap ); return result; } int main( void ) { printf( "%lld\n", sum( 9, 1, 2, 3, 4, 5, 6, 7, 8, 9 ) ); }La salida del programa es
45