bbs with gcc new version (varargs.h obsoleted)
FreeBSD 6.0 的 GCC 換新版了(3.4.4),原來的 bbs compile 時會遇到
/usr/include/varargs.h:34:2: #error “
is obsolete with this version of GCC.”
/usr/include/varargs.h:35:2: #error “Change your code to useinstead.”
換了之後,原來的 va_alist、va_dcl 就不能用啦。說是不能用,其實就是不必用囉。
換的方式是,先看看 function 內的 x = va_arg(ap, yyyyy) 的部份,直接把 yyyyy 和 x 替換到 va_alist 的地方,後面再加個 ",…"。接著刪除 va_dcl 。然後將 va_start (ap) 改為 va_start(ap, x) ,最後再把上面的 x = va_arg(ap, yyyy) 換為 x 。記得還要把原先 function 有宣告 yyyy x; 的地方刪掉。
這樣就可以了。
範例:
int
tcpcommand(va_alist)
va_dcl
{
va_list ap;
register char *fmt;
char *ptr;
va_start(ap);
fmt = va_arg(ap, char *);
vfprintf(NNTPwfp, fmt, ap);
…
tcpcommand(va_alist)
va_dcl
{
va_list ap;
register char *fmt;
char *ptr;
va_start(ap);
fmt = va_arg(ap, char *);
vfprintf(NNTPwfp, fmt, ap);
…
改為
int
tcpcommand(char *fmt, …)
{
va_list ap;
char *ptr;
va_start(ap,fmt);
vfprintf(NNTPwfp, fmt, ap);
…
tcpcommand(char *fmt, …)
{
va_list ap;
char *ptr;
va_start(ap,fmt);
vfprintf(NNTPwfp, fmt, ap);
…














