8

includeプリプロセッサ ディレクトリを使用して別のソース ファイルからインクルードしようとしているヘッダー ファイルがあります。引用形式と角度ブラケット形式の両方を使用しようとしましたが、どちらもうまくいかないようです。

ファイル名は.>"hello.h、コンパイラによって検索されるディレクトリです。私はこのようにそれを含めようとしました:

  • #include <.>"hello.h>
  • #include <.\>"hello.h>
  • #include <.\>\"hello.h>
  • #include ".>"hello.h"
  • #include ".>\"hello.h"

また、clang、gcc、clang++、g++ など、さまざまなCおよび C++ コンパイラも試しました。

明らかに、上記のどれも機能しませんでした。さもなければ、疑問の余地はありませんでした。

この名前は規格上は合法ではないのではないかと思いました。残念ながら、Cも C++ の標準仕様も手元にありません。私が見つけた唯一の信頼できる情報源は、ディレクティブに関するこの MSDNページ#includeと、GNU Cプリプロセッサのドキュメント (こちら) でした。GNU のドキュメントにはあまり書かれていませんが、MSDN には次の節があります。

path-spec は、オプションでディレクトリ指定が前に付いたファイル名です。ファイル名は、既存のファイルの名前にする必要があります。path-spec の構文は、プログラムがコンパイルされるオペレーティング システムによって異なります。

Cおよび C++ 標準がこれについて何と言っているか知りたいです。

Cおよび C++ ヘッダー ファイルの命名要件に関する OS 固有の規則はどこにありますか? 特に OS X、Linux、FreeBSD に興味があります。

エスケープ<"文字が機能しないのはなぜですか?

ファイルを含めるにはどうすればよいですか?

4

4 に答える 4

5

C と C++ の両方で、>との両方が含まれているため、これは有効なヘッダー名ではありません"

ヘッダー名の構文では、 で区切られたものに「<>改行と」を除くソース文字セットの任意のメンバーを含めることができ、 で区切られたものに「改行と>」を除くソース文字セットの任意""のメンバーを含めることができます"。エスケープ シーケンスの概念はありません。

于 2013-08-15T17:36:23.593 に答える
2

" および > は、Windows のファイル名として有効な文字ではありません。ファイル名は、hello.h、.\hello.h、..\hello.h のいずれかにする必要がありますが、.>"hello.h は使用できません。

#include "hello.h"
#include ".\hello.h"
#include "..\hello.h"
#include "c:/temp/hello.h"

これが、MSDN でそれについて何も見つからない理由です。

ext3 では、ほとんどの文字を使用できます (使用する場合、いくつかはエスケープする必要があります) が、ヘッダー ファイルとソース ファイルに名前を付けるときは、それらを使用しないことを強くお勧めします (読みやすさ以外の理由がない場合)。詳しくは: http://pic.dhe.ibm.com/infocenter/compbg/v121v141/index.jsp?topic=%2Fcom.ibm.xlcpp121.bg.doc%2Flanguage_ref%2Fc99preprocessor.html

于 2013-08-15T17:35:57.007 に答える