2

私は lex input .l ファイルを持っています。このファイルには、一連のルールと、それらのルールが発生したときの関数定義が含まれています。

別のソース ファイル main.c からこのスキャナーを使用しています。

main.c では、生成された lex ファイルへの参照をまったく必要とせずに yylex() を呼び出すことができます。なぜこれが機能するのですか?cmake を使用していますが、lexer.c ファイルからオブジェクトが作成され、それが実行可能ファイルにリンクされていることに気付きました。それが機能するには、yylex() への外部参照が必要だと思っていたでしょう。

私の質問は、lex .l ファイルで使用するすべての関数の前方宣言を別のヘッダーで作成し、それを lex ファイルに含める必要があるかどうかです。さらに一歩進んで、これらの関数を lex ファイルの外部で定義し、インクルード ファイルを参照して使用する必要がありますか?

4

1 に答える 1

2

yylex()関数なので問題なく呼び出せintます。したがって、技術的にはプロトタイプは必要ありません (ただし、これは C99 または C1x の適切な動作ではありません)。

すべての外部 (パブリック) 型、変数、および関数のヘッダー ファイルを用意することは常に良い考えです。これを lex ソース ファイルに含める必要はありませんが、含めることをお勧めします (特に、宣言が正しいことを確認するため)。lex 関数を使用するファイルには必ずヘッダー itを含める必要があります。

于 2013-03-22T23:08:01.267 に答える