• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:BCCでの日本語ファイル名の扱い)

BCCでの日本語ファイル名の扱い

vaguechatの回答

  • vaguechat
  • ベストアンサー率85% (47/55)
回答No.3

いろいろ試してみた結果、 5.5.1版のbcc32はソースファイル名がアルファベットの大文字(0x41-0x5a)の場合、 それをコンパイラ内部では小文字(0x61-0x7a)に変換して処理している様子。 例えば、A.cというファイル名は、 > bcc32 A.c Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland a.c: Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland のようにa.cとして扱われ、生成されるファイルもa.exeのように小文字になる。 シフトJISの場合、2バイト目が0x41-0x5aの範囲にあるものがファイル名に使われている場合、 0x61-0x7aの範囲にコンパイラ内部では変換されてそれを開こうとする。 Windowsにおいてはファイル名の大文字小文字の違いは同じファイルの名前として扱われるが、 これが2バイト文字においては全く無関係の文字になるので問題として現れる。 A.c→a.cの場合は、bcc32がa.cを開こうとしてもA.cを開くことができるので問題が起きない。 「イ」(0x8343)→「ツ」(0x8363) 例えば、「陰.c」(0x8941)なら「餌.c」(0x8961)として扱おうとする。 この処理はbcc32のバグ仕様だと思う。 例えば、コマンドプロンプト上でgccを使ってNTFS上の「161_ポインタの基礎.c」はきちんとコンパイルできるし、 Xターミナルエミュレータを使ってbash上でbcc32を使っても小文字扱いするという現象はやはり起きる。 つまり端末やシェルの問題でなくbcc32自身の問題と思われる。 対処法は、5.5.1版のbcc32が修正される可能性はまずないと思われるので、 もっと新しいBCCでこれが直っているかどうかを確認してみるとか、 2バイト文字の2バイト目がA-Zであるようなファイル名は使わないようにするか(対象が多すぎるが)、 これが最も現実的だろうけど1バイト文字だけをファイル名に使うか、 どちらにせよ「161_ポインタの基礎.c」をそのまま5.5.1版bcc32でコンパイルするのは無理だと思う。 他には、bcc32に渡す前に別名に変換してbcc32に渡して生成物のファイル名を元に戻すようなユーティリティを作るとか、 bcc32は止めて他のコンパイラに乗り換えるとか……

MetalLover
質問者

お礼

非常に詳しい御説明、ありがとうございます。 わざわざ試行錯誤して下さったのですね。本当に感謝します。 >ソースファイル名がアルファベットの大文字(0x41-0x5a)の場合、それをコンパイラ内部では小文字(0x61-0x7a)に変換して処理している様子。 それは気がつかなかったです。 >例えば、コマンドプロンプト上でgccを使ってNTFS上の「161_ポインタの基礎.c」はきちんとコンパイルできるし、 Xターミナルエミュレータを使ってbash上でbcc32を使っても小文字扱いするという現象はやはり起きる。つまり端末やシェルの問題でなくbcc32自身の問題と思われる。 これは僕も試してコンパイルできたので、bcc32の問題なんだなと思っていました。 >対処法は、5.5.1版のbcc32が修正される可能性はまずないと思われるので、もっと新しいBCCでこれが直っているかどうかを確認してみるとか・・・ bcc32の新しいバージョンを探してみたのですが、5.5.1より新しいものが見つかりませんでした。 もし見つかったら、報告して下さると大変助かります。 >他には、bcc32に渡す前に別名に変換してbcc32に渡して生成物のファイル名を元に戻すようなユーティリティを作るとか、 bcc32に、ソースファイルのみを渡す場合、つまりビルドのみなら、 ----------------------------------------------- @echo off move /y %1 temp.cpp bcc32 temp.cpp %* move /y temp.exe %~dpn1.exe ------------------------------------------------ といったバッチスクリプトで処理すればよいのですが、bcc32への引数は、場合によって変化するので、全ての場合に対応するスクリプトは作成する事ができないと思いました。 この回答をベストアンサーに選ばして頂きたいのですが、そうすると質問を締め切ってしまうので、もう少し延ばさせて下さい。 他に僕と同じような経験をしていて、何かしらの解決策が見つかった型がいらっしゃれば、是非教えていただきたいです。

MetalLover
質問者

補足

このバグを、Borland C++ Compilerの作成者達に報告したいのですが、Borlandはアメリカの大企業なので、僕みたいな一般人のバグレポートなんかまず相手にしないと思います。 そこで、Borland C++ Compilerのバグを取り除いている日本人の集団があるのではないかと思い、 Borland C++ Compiler バグ レポート といった検索語でGoogle検索したのですが、それらしいものが見つかりませんでした。 Borland C++ Compilerのバグがどうやって取り除かれているのかを御存じの方がいらっしゃれば、教えていただきたいです。

関連するQ&A

  • bcc55のエラー(cox32.obj)

    コンパイルすると、いつも Fatal:ファイルCOX32.OBJが開けません と言うエラーが出てしまいます。 bcc55のbinフォルダーにbcc32.cfgというファイルを作り、中身に -I"c:\Borland\Bcc55\include" -L"c:\Borland\Bcc55\lib" ilink32.cfgには -L"c:\Borland\Bcc55\lib" となっています。 初歩的なことかもしれませんがよろしくお願いします。

  • bcc32でSJIS以外のヘッダファイルが使えない

    こんにちは。 コマンドプロンプト上で、Borland C++ Compiler 5.5 のbcc32コマンドを使い、エンコーディングがShift_JIS以外、例えばUTF-8のヘッダファイルをインクルードしたソースファイルをコンパイルしようとすると、上手くいきません。 ヘッダファイルがShift_JISなら、それをインクルードしているソースがShift_JISでなくても、コンパイルできました。 bcc32をコンパイルコマンドとして扱う場合は、Shift_JISのヘッダファイルしか使えないのでしょうか? 以上の件について何かご存知の方がいらっしゃれば、是非教えて頂きたいと思います。 では、よろしくお願い致します。

  • コンパイル時のエラーについて>エラー E2209 警告 W8065?

    以前にも似たような質問がでていましたが・・・ 初心者なのですが下記のようにエラーによりコンパイル出来ません。 どなたか原因のわかる方いましたらいお教え下さい。 宜しくお願いします。  C:\source>bcc32 sample1.c Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland sample1.c: エラー E2209 sample1.c 1: インクルードファイル 'stdio.h' をオープンできない 警告 W8065 sample1.c 4: プロトタイプ宣言のない関数 'printf' の呼び出し(関数 main) *** 1 errors in compile *** もちろんbinディレクトリに bcc32.cfg【-I"c:\Borland\Bcc55\Include" -L"c:\Borland\Bcc55\Lib"】 と ilink32.cfg【-L"c:\Borland\Bcc55\lib"】 は入れてあります。 なんでできないんでしょかTT

  • Borland C++5.51で

    8MB超のソース junk.cpp を bcc32 -I"c:\Borland\Bcc55\include" -L"c:\Borland\Bcc55\lib" -W -WM -VM junk としてコンパイルしようとしたら Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland junk.cpp: Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland Fatal: Error detected (IMP302) Fatal: となりエラーになりました 8MBを切れば大丈夫だったのです IMP302とerrorで検索すると 外国に同じ問題でメーリングリストに質問しているものがあったのですが回答が得られていません 本人はリンク時エラーなのでソース分割すれば通る事は通るといっていました 分割が大変なソースなのでこのエラーをクリアしたいのですが解決策は無いのでしょうか?

  • BCCのbcc32.cfgファイルとilink32.cfgファイルの設定について

    この前もBCCのことで質問したものです。 BCC5.5を先日インストールしたのですが、PATH設定プログラムのところで疑問があります。 頼りにしているHPを見ながら設定してます。 それだとbcc32.cfgファイルの設定は -I"c:\Borland\Bcc55\include" -L"c:\Borland\Bcc55\lib" となっているのですが、私の場合は -I"c:\Borland\Bcc55\include" -L"c:\Borland\Bcc55\lib;c:\Borland\Bcc55\lib\PSDK" となっています。 同じくilink32.cfgファイルの設定も -L"c:\Borland\Bcc55\lib" となっているのですが、私のは -L"c:\Borland\Bcc55\lib;c:\Borland\Bcc55\lib\PSDK" となっています。 これはこのまま設定してもいいのでしょうか? このままで設定して一度MS-DOSプロンプトで↓のHPの"hello, world" (http://homepage1.nifty.com/tyuuki/old/cc/image/bcc_use_4.png) を試してみたのですが、最後の"test"を入力すると「コマンドまたはファイル名が正しくありません」とでてしまいます。その前までは順調に進みます。 やっぱり設定が違うのでしょうか。 もしくは、MS-DOSプロンプトを起動すると、最初に「コマンドまたはファイル名が正しくありません」と出てしまうのが影響しているのでしょうか。 ちなみにWindows MEを使っています。 初心者の質問なので、長々とわかりにくく書いててすみません。 もし、わかる方がいらっしゃったら教えてください。 よろしくお願いします。

  • コンパイラの設定

    Borland C++ Compiler 5.5をインストールしコンパイルしようとすると hello.c: エラー E2209 hello.c 1:インクルードファイル'stdio.h'をオープンできない。 警告 E8065 hello.c 4:プロタイプ宣言のない関数'printf'を呼び出し(関数 main()) *** 1 errors in Compile*** と出ててしまいました。 そして、過去にも同じような質問があり、 bcc32.cfgファイルに -I"c:\borland\Bcc55\include" -L"c:\borland\Bcc55\lib" を作成しても、何も変わらないのですが…。 教えて下さい。

  • DOSでコンパイルしたらインクルードファイルがない?(開けない?)

    borland c++ コンパイラ5.5をインストールして コマンドプロンプトで実行したのですが こんなメッセージがでました。どうすればよいのでしょうか? ライブラリとかいるんでしょうか? C:\borland\bcc55\Bin>bcc32 ffff.cpp Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland ffff.cpp: エラー E2209 ffff.cpp 1: インクルードファイル 'iostream.h' をオープンできない エラー E2451 ffff.cpp 5: 未定義のシンボル cout(関数 main() ) *** 2 errors in Compile *** ちなみにソースファイルの内容は以下のとおりです。 #include <iostream.h> void main(){ cout<<"ffff"; }

  • Borland C++ Compiler で winbase.h を使えないのですが・・・

    Borland C++ Compiler を使っているのですが,winbase.h 自体が使用できません。 次のようなプログラムでもコンパイルが通りません。 #include <winbase.h> int main(void){ return 0; } エラーは以下の通りです。 *** コンパイル開始 *** Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland ########.c: エラー E2139 C:\borland\bcc55\Include\winbase.h 227: 宣言に ; がない エラー E2238 C:\borland\bcc55\Include\winbase.h 228: 'ULONG_PTR' の宣言が複数見つかった エラー E2344 C:\borland\bcc55\Include\winbase.h 227: 一つ前の 'ULONG_PTR' の定義位置 (中略) エラー E2228 C:\borland\bcc55\Include\winbase.h 263: エラーあるいは警告が多すぎる *** 26 errors in Compile *** *** コンパイル終了 *** どうすればよいでしょうか? 何かちょっとした情報でもお願いします。

  • Borland C++ Compiler について…

    こんにちは。 Borland C++ Compiler 5.5 をダウンロードして、 メモ帳で、プログラムを書き (一番最初にたいていの人が書く例のアレ。) コマンドプロンプトでコンパイル…。 できません。どうしてでしょう?というのが質問です。 もちろん環境変数は設定しました。 変数名 > path 変数値 > C:\Borland\bcc55\bin このように。 実際にコンパイルすると 'bcc32' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。 と警告が出ます。 さらに、直接 C:\borland\bcc55\Bin\bcc32 と入力すると、コンパイルしてくれるようです。 が、ここでも別のエラーがでます。 エラー E2133: コマンド 'ilink32.exe' を実行できない と。 まとめ 1.コンパイルができない(環境変数関係?) 2.ilink32.exe が実行できない 以上の2点について、解決策をご存知の方がおられましたら、 ご教授願いたく存じます。

  • Borland C++ Compiler 5.5でのコンパイル可能ディレクトリの継承?

    Borland C++ Compiler 5.5.1をインストールしてサンプルソースをコンパイルしようとしたところ、「bcc32が認識されていない」エラーが出ました。 bccの設置場所はc:borland\bcc55\Binであり、Pathの設定も行い、bcc32.cfgとilink32.cfgもBinディレクトリ下に正しく作成済みです。 また、ソースの場所はc:sourceにsample1.cとして保存してあります。 なお、コマンドプロンプトでC直下での「C:\>bcc32」と入力すると正しく内容が表示され、 「C:\>bcc32 source\sample1.c」と入力すればC直下にコンパイルしたEXEファイルが生成されます。 しかし、「C:\source>bcc32」や、「C:\source>bcc32 sample1.c」では非認識エラーとなってしまいます。 windowsのOSはXP SP2のホームエディションです。 なぜ、C直下でしかbccが反映されていないのでしょうか? 対処法を教えてください、お願いします。