【问题标题】:Why should I add identifiers before struct? I can't see why, how to fix this?为什么要在 struct 之前添加标识符?我不明白为什么,如何解决这个问题?
【发布时间】:2017-11-25 21:02:51
【问题描述】:

这是我的 .c 文件中的代码:

这是错误:

【问题讨论】:

  • 实际问题在list.h 内部,或者在您显示的片段上方。我们需要以文本形式查看完整程序,否则我们将无法为您提供帮助。请阅读并遵循stackoverflow.com/help/mcve 的说明。
  • 欢迎来到 stackoverflow.com。请花一些时间阅读the help pages,尤其是名为"What topics can I ask about here?""What types of questions should I avoid asking?" 的部分。也请take the tourread about how to ask good questions。最后请学习如何创建Minimal, Complete, and Verifiable Example
  • 为了详细说明 WeatherVane 所说的内容,我们希望您将代码和错误消息复制并粘贴到问题框中。我们不希望您发布屏幕截图,因为那样我们必须重新输入所有内容才能修改它。修补您发布的代码是我们找出问题所在的重要部分。
  • 您在基于文本的系统中发布了图片文本。让我们想一想……
  • @WeatherVane :我从来没有发现你除了乐于助人。关于偏执的部分是一般性的,并非针对您。可悲的是,尽管参与了讨论,但 La 选择忽略该请求..

标签: c unix struct


【解决方案1】:

编译器对它看到的代码发出错误预处理之后,因此您必须考虑该代码的样子包含的“list.h”已被扩展.

该文件末尾的内容很可能是导致错误的原因 - 例如,结构定义末尾缺少分号。

【讨论】:

    【解决方案2】:

    每当您收到类似的错误消息时

    [file]:[line]:[column]: expected [punctuation] before [keyword]
    

    问题通常出在编译器抱怨的行之前之前的代码。例如,当前面的声明或语句没有正确结束时,你会得到这样的错误:

    struct THING { }   // oops! forgot a semicolon on this line
    struct OTHER { };  // compiler complains here, but the problem is up there
    

    这是因为编译器在处理第二条语句的开头之前并不“知道”有问题。

    在 C 语言中,要在“行前”找到代码,您可能需要查看过去或查看预处理器指令。在你的代码 sn-p

    #include "list.h"
    #define true 1
    #define false 0
    struct NODE *head;
    

    当编译器解析struct NODE ... 时,#define 指令不再存在,#include "list.h" 已替换为文件list.h 的内容。所以,可能是缺少的分号或list.h 中的任何内容。

    没有看到你的完整程序,我无法更具体。

    【讨论】:

    • 感谢您的帮助!我明白你的意思!
    猜你喜欢
    • 2013-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-12
    • 2010-11-23
    • 1970-01-01
    • 2013-02-03
    相关资源
    最近更新 更多