- ベストアンサー
コンパイルエラー includeでNo such file
独学でCを学習中です。 コンパイルエラーについて教えてください。 Windows98SEでLSI C-86 Ver 3.30c 試食版を使用して コンパイルしようとしていますが、下記のエラーが出てしまいます。 abc.c 103: can't open: http_config.h: No such file or directory (以下同様に数行) Includeの指定先にファイルがない、というエラーメッセージだと思うのですが 実際にはファイルはあり、同じようにincludeしているヘッダファイルで 読み込まれているものもあります。 推測ですがヘッダファイル名が8文字以上だとエラーが出ているようです。 これは何が原因でエラーになってしまうのでしょうか。 他に思いつく事は、 マニュアルどおりconfig.sysの最終行にはFILES=20を書き加えました。 お手数ですがエラーの原因と対策のご教示をお願いできますでしょうか。 よろしくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
GetShortPathNameはsystem32フォルダの中のkernel32.dllにあるAPIです。 APIをBorlandのフリーのコンパイラやLSI C-86で使えるかどうかは私にはわかりません。 GetShortPathNameは外部的にみれば ファイル名を「abcdefghijk.c」→「abcdef~1」に変換する 関数みたいなものです。 もちろん「abcdefghijka.c」と「abcdefghijkb.c」 が存在した場合等は外部的な処理だけでは無理ですが。 win98SEは手元にないのでわからないのですが、ファイルの プロパティにMS-DOSファイル名という項目 がなかったでしょうか。
その他の回答 (2)
- gimmick
- ベストアンサー率49% (134/270)
sha-girlさんの回答への付け足しです。 Borland C++ CompilerでもWin32APIを使用することができます。(LSI C-86については知りません。) 基本的には、windows.hをインクルードしておけば、あとはANSIの標準ライブラリと同じように利用できます。例えば、GetShortPathNameであれば以下のような感じで使用します。 ------------------------------------------------- #include <stdio.h> #include <windows.h> int main(){ char longname[256]="C:\\123456789.txt"; char shortname[256]; GetShortPathName(longname, shortname, sizeof(shortname)); printf("shortname : %s\n", shortname); return 0; } ------------------------------------------------- あまり頻繁には使用しないと思いますが、ショートファイルネームが知りたい場合に使用してください。
お礼
ソースまでご提示いただきありがとうございます。 私の知識不足ですぐには応用出来そうにありませんが 追々参考にさせていただきます。 ありがとうございました。
- sha-girl
- ベストアンサー率52% (430/816)
>8文字以上だとエラーが出ているようです LSI C-86がDOSベースで動くコンパイラだからです。 DOSのファイル名の最大長は8文字+拡張子3文字です。 多分LSI C-86だと ファイル名が8文字+拡張子3文字より多いと ヘッダファイルでなくてもコンパイルできないはずです。 ※どうしても8文字以上のファイル名をつけたいとするなら MS-DOSでのファイル名(ショートファイル名)を GetShortPathName APIかなにかで知る必要があります。 >マニュアルどおりconfig.sysの最終行にはFILES=20を書き加えました。 これはコンパイルエラーとは関係ありません。
お礼
アドバイスありがとうございます。 Borlandのフリーのコンパイラで試したところ、 質問のエラーは出なくなりました。 便乗の質問で恐縮ですが、GetShortPathName APIでファイル名を知るのは かなり難しい事なのでしょうか。 今後のために、教えていただけるとたいへんありがたいのですが、 お時間がありましたらお返事いただけましたら幸いです。 #蛇足ながら >ファイル名が8文字+拡張子3文字より多いと >ヘッダファイルでなくてもコンパイルできないはずです。 強引にabcdefghijk.cとかのファイルをabcdef~1とか指定して 無理矢理コンパイルさせていました。素人の強引さで汗顔の至りです。
お礼
再度のご教授ありがとうございます。 プロパティを確認したところ、MS-DOSファイル名という項目があり、 読込エラーが出ていたヘッダファイルは、******~1.hになっていました。 お答えいただいたGetShortPathNameの説明を拝見しましたところ、 私にはまだ難しい事柄のようですので、もう少し修練をしてから 再度ここを読み返し、チャレンジしたいと思います。 たいへん助かりました。ありがとうございます。