TVアニメ『悪偶 -天才人形-』7/9(月)深夜0時~TOKYO MX他に放送開始 PV第2弾
アニメ『悪偶 -天才人形-』
1話で設定に引き込まれます。怪しいキャラデザとかも設定によく合ってます。2話目でいきなりバトルになって、戸惑いましたが、もう少し見てみようと思います。
あぐう、ということで、argumentやります。
Cのmain関数のargですが、こんな風に書きますよね。
takk@deb9:~/tmp$ cat t.c
#include <stdio.h>
int main(int argc, char* argv[])
{
while(argc--)
printf("%s\n", *argv++);
return 0;
}
takk@deb9:~/tmp$
定型文ですね。
実行すると、
takk@deb9:~/tmp$ gcc t.c takk@deb9:~/tmp$ ./a.out aa bb cc dd ee ff ./a.out aa bb cc dd ee ff takk@deb9:~/tmp$
このように出力されます。
このargcやargvって、他の変数名に変えられるのでしょうか?
やってみます。
takk@deb9:~/tmp$ cat t.c
#include <stdio.h>
int main(int n, char* str[])
{
while(n--)
printf("%s\n", *str++);
return 0;
}
takk@deb9:~/tmp$ gcc t.c
takk@deb9:~/tmp$ ./a.out aa bb cc dd ee ff
./a.out
aa
bb
cc
dd
ee
ff
takk@deb9:~/tmp$
問題なく動きました。名称変更は大丈夫なようです。
次は、引数を2つから1つだけにしてみます。ビルドできるでしょうか。
takk@deb9:~/tmp$ cat t.c
#include <stdio.h>
int main(int n)
{
printf("%d\n", n);
return 0;
}
takk@deb9:~/tmp$ gcc t.c
takk@deb9:~/tmp$ ./a.out aa bb cc dd ee ff
7
takk@deb9:~/tmp$
ビルドできて、動作もしました。行けるんですね。
では、次に、この引数一つだけのmain関数が、ANSI準拠しているかどうか、確認します。
man gccで、言語オプションの章を引用。
言語オプション
以下のオプションは、コンパイラが受け付ける C の方言に関する制御を行な
います:
-ansi 全ての ANSI 標準の C プログラムをサポートします。
このオプションは、GNU C が持つ ANSI C との非互換な機能を全て排
除します。 例えば、asm, inline, typeof などのキーワード
や、unix や vax などの現在使用しているシステムを規定する定義済
みマクロなどが抑制されます。 さらに、好ましくなくかつほとんど
使用されない ANSI のトライグラフの機能を使 用可能とし、さらに
`$' を識別子の一部として使用できないようにします。
代替キーワードである__asm__, __extension__, __inline__,
__typeof__ は、 `-ansi' が指定された場合でも使用することが可能
です。もちろん、 これらを ANSI C プログラムで使用することが望
ましくないのは当然ですが、`-ansi' をつけてコンパイルされる場合
でも、インクルードされるヘッダファイル中に これらが記述できる
ということは有用です。 __unix__ や __vax__ などの代替定義済み
マクロは、 `-ansi' を指定する場合でも指定しない場合でも、利用
可能となっています。
`-ansi' オプションは、ANSI 準拠でないプログラムを不必要に拒否
することは ありません。もしこのような動作を行なわせたい場合に
は`-ansi'に加えて-pedantic' オプションを指定する必要がありま
す。
-ansi -pedanticを指定すれば、ANSI準拠でないプログラムを拒否してくれるってことですね。
では、先ほど作った引数1つのmain関数を、このオプションをつけてビルドしてみましょう。
takk@deb9:~/tmp$ gcc -ansi -pedantic t.c
t.c:3:5: warning: ‘main’ takes only zero or two arguments [-Wmain]
int main(int n)
^~~~
takk@deb9:~/tmp$
warningが表示されました。どうやら、ANSI準拠ではなさそうです。
引数を2つに戻してみて、もう一度チェック。
takk@deb9:~/tmp$ cat t.c
#include <stdio.h>
int main(int n,char *str[])
{
printf("%d\n", n);
return 0;
}
takk@deb9:~/tmp$ gcc -ansi -pedantic t.c
takk@deb9:~/tmp$
今度はwarningが表示されません。引数2つタイプはOKのようです。
次は、引数なしタイプ。
takk@deb9:~/tmp$ cat t.c
#include <stdio.h>
int main()
{
printf("Hello\n");
return 0;
}
takk@deb9:~/tmp$ gcc -ansi -pedantic t.c
takk@deb9:~/tmp$
これもOKですね。


コメント