我应该为lex函数创建头文件吗?

时间:2013-03-22 22:13:06

标签: c linker lex

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

我在另一个源文件main.c

中使用此扫描程序

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

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

1 个答案:

答案 0 :(得分:2)

您可以毫无问题地致电yylex(),因为它是int功能。所以从技术上讲,你不需要原型(虽然这不是正确的C99或C1x行为)。

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