2

我有一个 lex 输入 .l 文件,其中包含一堆规则和遇到这些规则时的函数定义。

我正在使用来自另一个源文件 main.c 的扫描仪

在 main.c 中,我可以调用 yylex() 而无需对我生成的 lex 文件进行任何类型的引用。为什么这行得通?我正在使用 cmake,我注意到它从我的 lexer.c 文件中创建了一个对象,并将其链接到我的可执行文件。我原以为我需要对 yylex() 的外部引用才能使其正常工作。

我的问题是我是否应该为我在 lex .l 文件中使用的所有函数创建前向声明,并将其包含在 lex 文件中?更进一步,我是否应该在 lex 文件之外定义这些函数,并通过引用包含文件的方式使用它们?

4

1 回答 1

2

您可以yylex()毫无问题地调用,因为它是一个int函数。所以从技术上讲,您不需要原型(尽管这不是正确的 C99 或 C1x 行为)。

为所有外部(公共)类型、变量和函数创建一个头文件总是一个好主意。您不需要将它包含在您的 lex 源文件中,但这样做是一个非常好的主意(如果没有别的,请检查您的声明是否正确)。您绝对应该在任何使用 lex 函数的文件中包含它的标题。

于 2013-03-22T23:08:01.267 回答