次のコードを検討してください。
#include <stdio.h>
int aaa(char *f, ...)
{
putchar(*f);
return 0;
}
int main(void)
{
aaa("abc");
aaa("%dabc", 3);
aaa(("abc"));
aaa(("%dabc", 3));
return 0;
}
なぜ次の行なのか疑問に思いました。
aaa("abc");
aaa("%dabc", 3);
aaa(("abc"));
エラーなしで実行されますが、4行目(以下を参照):
aaa(("%dabc", 3));
次のエラーが生成されます。
main.c:15:2:警告:「aaa」の引数1を渡すと、キャストなしで整数からポインターが作成されます
main.c:3:5:注:「char *」が必要ですが、引数は「int」型です。