【问题标题】:Should I create a header file for lex functions?我应该为 lex 函数创建一个头文件吗?
【发布时间】:2013-03-12 22:05:47
【问题描述】:

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

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

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

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

【问题讨论】:

  • 您应该启用警告并注意所有编译器消息。编译器会准确地告诉您哪些声明在哪里丢失。通常,您定义的任何可公开访问的函数都应在某个标头中声明,并且此标头应包含在任何使用该函数的文件中。

标签: c linker lex


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2011-12-24
    • 1970-01-01
    • 2020-05-01
    • 2017-10-26
    • 1970-01-01
    • 2010-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多