UNIX V6のchmodはコンパイルがそのまま通る
小ネタですが、UNIX V6のs1\chmod.cを現代のコンパイラ(Visual C++ 2012)でコンパイルしてみました。UNIX V6といえば1975年にリリースされたPDP-11向けに書かれたコードですが、警告が出るもののどこも変更することなくコンパイルが通ります。
countを初期化しなかったり、'0'〜'7'が連続していることを想定したコードとなっていたりとかなり処理系依存なものとなっています。
main(argc, argv) char **argv; { register i, m; register char *c; int count; if(argc < 3) { printf("arg count\n"); exit(1); } c = argv[1]; m = 0; for(m=0; *c; c++) { if(*c < '0' || *c > '7') { printf("bad mode\n"); exit(1); } m = (m<<3) | *c - '0'; } for(i=2; i<argc; i++) if(chmod(argv[i], m) < 0) { count++; perror(argv[i]); } exit(count); }
Microsoft(R) C/C++ Optimizing Compiler Version 17.00.60610.1 for x86
Copyright (C) Microsoft Corporation. All rights reserved.chmod.c
c:\users\user\desktop\chmod.c(23) : warning C4700: 初期化されていないローカル変数 'count' が使用されます
Microsoft (R) Incremental Linker Version 11.00.60610.1
Copyright (C) Microsoft Corporation. All rights reserved./out:chmod.exe
chmod.obj