【发布时间】:2013-03-12 22:05:47
【问题描述】:
我有一个 lex 输入 .l 文件,其中包含一堆规则和遇到这些规则时的函数定义。
我正在使用来自另一个源文件 main.c 的扫描仪
在 main.c 中,我可以调用 yylex() 而无需对我生成的 lex 文件进行任何类型的引用。为什么这行得通?我正在使用 cmake,我注意到它从我的 lexer.c 文件中创建了一个对象,并将其链接到我的可执行文件。我原以为我需要对 yylex() 的外部引用才能使其正常工作。
我的问题是我应该为我在 lex .l 文件中使用的所有函数创建前向声明,并将其包含在 lex 文件中吗?更进一步,我是否应该在 lex 文件之外定义这些函数,并通过引用包含文件的方式使用它们?
【问题讨论】:
-
您应该启用警告并注意所有编译器消息。编译器会准确地告诉您哪些声明在哪里丢失。通常,您定义的任何可公开访问的函数都应在某个标头中声明,并且此标头应包含在任何使用该函数的文件中。