【问题标题】:clion: fixing an undefined identifierclion:修复未定义的标识符
【发布时间】:2018-10-10 06:10:40
【问题描述】:

我继承了一个使用 make 的 C 项目,但我不是 cmake 或 Clion 方面的专家

我有一个文件 a.c

#define A 1
#include "b.c"

b.c

int i=A*3; //<=== undefined identifier A here in Clion

这可以用简单的 CMake 文件编译好

add_library(myLib a.c)

编辑 b.c 时如何告诉 Clion 标识符 A 是在 a.c 中定义的

注意

VSCode 似乎有点“聪明”:同时编辑 a.c 和 b.c 将使 b.c 使用 a.c 中定义的标识符。不过,如果有 CLion 解决方案,我将不胜感激。

【问题讨论】:

  • 与您的问题无关(也许),但如果您将源文件包含到另一个源文件中,那么您可能做错了什么。
  • @Someprogrammerdude 你肯定是对的,但不幸的是这不是我编程的东西,我想尽可能少地改变它。最初的开发人员这样做是为了让他/她可以轻松地使用各种版本的 a.c 生成不同的目标,同时保持相同的 b.c

标签: c cmake clion


【解决方案1】:

这个标识符显然不是为b.c 定义的。并且包含.c 文件是相当奇怪的。

您可能想要的是a.h 文件,其内容如下:

#ifndef _A_H
#define _A_H

#define A 1

#endif // _A_H

然后在a.cb.c 中使用#include "a.h"

【讨论】:

  • 这并不能真正回答我的问题,但是,是的,我同意:这是原始开发人员应该做的(你会感到惊讶,他来自一家知名商店 :) )。因此,+1
  • 啊,您希望 IDE 提供标识符信息,即使它与当前翻译单元无关?好吧,像 Clion、MSVC 和 KDevelop 这样的“真正的”IDE 正在努力明确地不为当前 TU 中未定义的符号提供信息。例如,如果不包含&lt;stdio.h&gt;,即使printf 也将是未定义的。相反,VS Code 只是一个高级文本编辑器,它并不完全理解代码语义,所以它只是显示它所拥有的任何信息。
  • 是的。没错。我将您的评论作为答案(CLion 不可行),然后将其奖励给您。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多