2013-03-22 54 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

相关问题