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中,所以用到可变参数的程序应该包含这个头文件.
解决方法:包含上#include “stdarg.h”