1

MSVC ++を使用して単純なウィンドウをプログラムしており、次の行に沿ってメニューのリソースファイルを含めました。

MYMENU MENU DISCARDABLE
//etc.

そして私は次のような定義を持つヘッダーファイル「resourcedef.h」を作成しました

#define ID_MYMENU_FILE_CLOSE 1002

main.cppファイルにエラーなしで含めることができますが、リソースファイルに含めると、エラーが発生します。

.\resourcedef.h(9) : fatal error RC1004: unexpected end of file found

(resourcedef.hは正確に9行の長さです)。.hの終わりに改行を追加すると、

//lines 1 - 8
#define ID_MYMENU_FILE_OPEN 1001

10番目の空白行(SOには表示されない)があるため、正常にコンパイルされます。コメントも含めて10行目に何かを入れると、コンパイラーはエラーを出します。誰かがこれを引き起こす原因と私がそれを修正する方法を知っていますか?

4

2 に答える 2

4

テキストファイルの最後にある末尾の改行を省略するのは悪い考えです。そこにないと正しく機能しないツールがたくさんあります。(一部のテキストエディタは、それが欠落していることを警告することさえあります。)

末尾の改行はテキストファイルの標準的な動作です。フローを使用して、そこに改行を入れてみませんか。他のみんなはそうします。8-)

于 2009-09-21T22:34:33.453 に答える
0

ずっと前に、バージョン2かそこら(1994-ish)のMSVC ++は、ファイルの最後にある「部分的な」行を適切に処理しませんでした。例えば:

header.h

#ifndef __HEADER_H
#define __HEADER_H

void foo();

#endif        // <-- no newline here

main.cpp

#include "header.h"
#include "other.h"

この状況では、プリプロセッサは、インクルードを解決した後、次のテキストを表示します。

#ifndef __HEADER_H
#define __HEADER_H

void foo();

#endif#include "other.h"

バグは、最後の行が上記のように一緒に実行され、"other.h"ファイルが含まれないことでした。当時のIDEでは、末尾に改行がないファイルを誤って作成して、上記の状況に遭遇するのは簡単でした。

幸いなことに、このバグは長い間修正されています。行の途中でファイルの終わりに遭遇することを予期していないとコンパイラが警告する状況の1つを見つけたようです。これは一般的に良いことと見なされています。

于 2009-09-21T22:38:25.007 に答える