2013-03-22 84 views
2

我有一個lex輸入.l文件,其中包含一組規則和函數定義,以便在遇到這些規則時使用。我應該爲lex函數創建一個頭文件嗎?

我使用來自另一個源文件這款掃描儀,main.c中

main.c中,我可以調用函數yylex(),而不必有什麼樣的基準來我生成的文件法。爲什麼這個工作?我正在使用cmake,並且我注意到它從我的lexer.c文件中創建了一個對象,並將其鏈接到我的可執行文件。我原以爲我需要一個外部參考yylex(),但爲了工作。

我的問題是我應該爲我在lex .l文件中使用的所有函數在單獨的頭文件中創建前向聲明,並將其包含在lex文件中?更進一步,我應該在lex文件之外定義這些函數,並通過引用include文件來使用它們嗎?

+1

您應該啓用警告並關注任何和所有編譯器消息。編譯器會告訴你在哪裏丟失了哪些聲明。通常,您定義的任何可公開訪問的函數都應該在某個頭文件中聲明,並且該頭文件應該包含在使用該函數的任何文件中。 – 2013-03-22 23:01:02

回答

2

您可以撥打yylex(),因爲這是一個int函數。所以在技術上你不需要原型(儘管這不適合C99或C1x行爲)。

這是總是對於所有外部(公共)類型,變量和函數都有一個頭文件是一個好主意。你不需要要求將它包含在你的lex源文件中,但這樣做是一個非常好的主意(如果沒有別的,檢查你的聲明是否正確)。你當然應該將它包含在任何使用lex函數的文件中。

+0

這是有道理的和種類的確認我在想什麼。 – Derek 2013-03-25 14:33:56

相關問題