c - 得到错误答案——关于变量个数不确定

标签 c variadic-functions function-definition

当我在Linux系统中运行下面的程序时,我无法得到预期的答案“9”。但我在windows系统中可以得到它。

为什么会发生这种情况?

#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;

}

我在GDB中调试,如下图: enter image description here

我的系统配置如下。

Linux version 5.11.0-41-generic (buildd@lgw01-amd64-005) (gcc (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0, GNU ld (GNU Binutils for Ubuntu) 2.34)

最佳答案

您需要使用 header <stdarg.h> 中定义的宏.

给你。

#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 ) );
}

程序输出为

45

关于c - 得到错误答案——关于变量个数不确定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70484750/

相关文章:

c++ - 如何判断va_list是否为空

c - 为什么可以使用任意数量的参数调用未定义参数的函数?

c++ - 具有 0 个参数的函数 - void vs void*?

c - 使用 UART 时 BREAK 的实际含义是什么?

java - Java 和 C 不用套接字进行通信?

php - 函数中的可变长度引用参数列表

计算克隆函数的可变参数数量

C - 检查字符串是否包含任何非空字符

c++ - Visual Studio C 与 C++ 标志问题

android - 禁用 JNI C 代码中变量的编译器优化