引数の個数

普通、引数の個数は関数を呼ぶときに一致させますが、一致しなくても動きます。
これを利用するいろいろなテクニックがあります。
余分な引数を渡す
a&&(c=0,printf("%d",b));
a&&printf("%d",b,c=0);
printf()の括弧を利用することで演算子の順序を変え、余分な括弧を省略しています。
引数は後ろから評価されるので上のように書くと計算の順番が変わりません。
getchar()に引数
a=0;b=getchar();
b=getchar(a=0);
getchar()は本来引数をとらないので中に式を入れるとセミコロン一つ分だけ縮めることができます。
再帰関数の引数を増やす
自作の再帰関数の中でローカル変数を使いたい場合、引数を増やしてしまう方法があります。
f(a,b,c){...}main(){f(0,1);}
上の場合だとcという変数を増やしてローカル変数として利用しています。
cは初期化されていないのでどこかで代入する必要があります。
引数を省略するとどうなるか
引数を省略した場合、その前に呼び出した関数の引数が残っている可能性が高いです。
char s[99];main(){gets(s);puts();}
このコードだとputsの引数にはsが入ります。

変数の型

int型引数にdouble型の変数を渡す
f(0,0);
f(0.);
0.は64bit分0が並んでいるので0二つ分に相当します。
このように引数に0が2つ入る時は0.を代わりに使うことで1byte縮みます。

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

メンバーのみ編集できます