[ C ] 確認したのか?
char* value;
なんて書式のほうがわかりやすかったはずだ。
今は文法的にこれは許されていないから、ポインタ変数の定義をする場合は、普通は仕方なく、
char * value;
と「*」を離して書くくらいしかできない。
実は最近のコンパイラはこのどちらの表現でもちゃんと解釈して「通る」のだが、古いコンパイラではこの文法を通さないものもあったため、教科書ではどうしても、
char *value;
と書いてあるものが多いのだ。
( 三田典玄の「体育館の裏話」 関数の話(5), 2007/10/19 )
えっと、何を何を言っているんだろうか?
char* value; がコンパイルできない???
ちゃんと確かめてからほざいてほしいものだ。gcc 2.95.3, gcc 3.4.4, gcc 4.1.2 で確認したが、全く問題なくコンパイルできるぞ。MSVC コンパイラ Version 14.00.50727.762 でも確認したが問題なくコンパイルできる。
#include
int main( void )
{
char* value = "hoge";
printf( "%s\n", value );
return 0;
}
上記サンプルコードをコンパイルしてみよう。まずは gcc 2.95.3
bash-2.05$ gcc --version
2.95.3
bash-2.05$ gcc test.c
bash-2.05$ ./a.out
hoge
gcc 2.95.3 はかなり古いコンパイラだが、エラーはもちろん警告すら表示されない。
gcc 4.1.2 でも確認を行ったが、こちらでもエラー・警告は一切表示されなかった。
では次に Microsoft の C/C++ コンパイラでコンパイルしてみよう。
わたしの環境では以下のようになった。
F:\>cl test.c
Microsoft(R) 32-bit C/C++ Optimizing Compiler Version 14.00.50727.762 for 80x86
Copyright (C) Microsoft Corporation. All rights reserved.
test.c
Microsoft (R) Incremental Linker Version 8.00.50727.762
Copyright (C) Microsoft Corporation. All rights reserved.
/out:test.exe
test.obj
F:\>test.exe
hoge
みてのとおりこちらでもエラーにも警告にもならない。gcc 2.95.3 以前は全く知らないのだが、少なくとも「今のコンパイラ」ではエラーにも警告にもならないというのは上記の結果の通りだ。もしかしたらエラーになるすごくマイナーなコンパイラがあるのかもしれないが、わたしは char* value; という表記がエラーになると聞いたことは一度もない。
そのほか、char を 「8ビット符号付き変数」と解説している ( 正しくは、C の各型がどの程度の精度を持つのかは実装依存 ) など、全く正しい理解がされていないように思える。
「続く」とあるのだが、続きを書いて無理解をさらすより、C を一通り復習しなおしたほうがいいと思いますよ。
| 固定リンク
この記事へのコメントは終了しました。
コメント