(.text+0x159d):undefined reference to `va_start'

my错误:

In function `Abort':
remap_functions.c:(.text+0x159d): undefined reference to `va_start'
remap_functions.c:(.text+0x15d0): undefined reference to `va_end'

分析:

参数个数可变的函数abort,printf()

int printf( const char* format, ...);
它除了有一个参数format固定以外,后面跟的参数的个数和类型是可变的,可以适应多种调用方式。

abort函数实现如下:

void ABORT(char* format, ...)
{
    const int format_buffer_max_length = 1024;
    char format_buffer[format_buffer_max_length];


    if ((format != NULL) && (strlen(format) > 0))
        snprintf(format_buffer, format_buffer_max_length, "ABORTED: %s", format);
    else
        snprintf(format_buffer, format_buffer_max_length, "ABORTED.");


    va_list vargs;
    int retval;


    va_start(vargs, format);
    retval = vprintf(format_buffer, vargs);
    va_end(vargs);


#ifndef MEX
    //memset((void *) 1, 13, 666); // Seg. fault (useful when debugging).
    exit(0);
#else
    const int mexErrMsgTxt_buffer_max_length = 1024;
    char mexErrMsgTxt_buffer[mexErrMsgTxt_buffer_max_length];


    va_start(vargs, format);
    retval = vsnprintf(mexErrMsgTxt_buffer, mexErrMsgTxt_buffer_max_length, format_buffer, vargs);
    va_end(vargs);


    mexErrMsgTxt(mexErrMsgTxt_buffer);
#endif
}

C函数要在程序中用到以下这些宏:
void va_start( va_list arg_ptr, prev_param );

type va_arg( va_list arg_ptr, type );

void va_end( va_list arg_ptr );
va在这里是variable-argument(可变参数)的意思.这些宏定义在stdarg.h中,所以用到可变参数的程序应该包含这个头文件.

出错原因:没有包含 stdarg.h

解决方法:包含上#include “stdarg.h


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值