はじめに
この記事は、@kjunichiの2014年パーソナルアドベントカレンダーの4日目の記事です。
ふと思い立ちDockerでUbuntuを動かし、古いソースをビルドしようとして学んだことを記事にした。
gccなら怒られないとおもったコードだったが
最近はclangだとエラーメッセージは丁寧なものの、チェックは厳しいのですが、gccなら安心、古いコードならなおさらgccならやってくれると信じていたが、どうやら俺の知ってるgccも月日が流れ、サポートを止めてしまった為に、目的のコードのコンパイルが失敗した。
/usr/lib/gcc/x86_64-linux-gnu/4.8/include/varargs.h:4:2: error: #error "GCC no longer implements." #error "GCC no longer implements ." ^ /usr/lib/gcc/x86_64-linux-gnu/4.8/include/varargs.h:5:2: error: #error "Revise your code to use ." #error "Revise your code to use ." ^
可変引数を扱う古いコードを何とかするには
stdarg.hを使うように変更
-#include <varargs.h> +#include <stdarg.h>
va_alistは「...」(ピリオド三つ)にし、va_dclは削除
-PSprintf(format, va_alist) - char* format; - va_dcl +PSprintf(char *format, ...)
va_startnoの第二引数に第一引数で渡されたパラメータを追加
- va_start(args); + va_start(args, format);
Link
関連記事
- Node.jsでストリームをパイプに繋いで生じた疑問と学んだこと
- 150行の量子コンピューターのシミュレーターのコードを知って学んだこと
- InkscapeをmacOSでビルドして動かせなかったが学べたこと