まずtest.cを示します。
1 /*次にv6.cを示しますが、test.cとの違いは1行目に「#」があることだけです。
2 * test.c
3 */
4
5 #include "test.h"
6
7 test()
8 {
9 return 0;
10 }
1 #インクルードしているtest.hを示しますが、内容に意味があるわけではありません。
2 /*
3 * test.c
4 */
5
6 #include "test.h"
7
8 test()
9 {
10 return 0;
11 }
1 /* test.h */UNIX V6のC言語で各々をコンパイルしようとすると、驚くような挙動を示します。
# cc -c test.ctest.cでは#includeが現れた行で「Unknown character」というエラーが出て、それに引きずられるようにエラーが続きます。ところがv6.cでは何事もなくコンパイルが出来ます。相違点は1行目の「#」の有無だけです。
5: Unknown character
7: Expression syntax
8: External definition syntax
# cc -c v6.c
# diff test.c v6.c
0a1
. #
どうしてこういうことになるのか理解していませんが、UNIX V6のC言語はこういうものなのだと思うしかないでしょう。/usr/source/c/c00.cなどを見ても、1行目に「#」があります。『Lions' Commentary on UNIX』でも、和訳のアスキー版でも86頁にあるmain.cの最初の行(1500行目となっている個所)を見ると、さりげなく「#」があります。うっかりすると見過ごしてしまいそうですが。
0 件のコメント:
コメントを投稿