Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 无法解析符号_C_Eclipse Cdt - Fatal编程技术网

C 无法解析符号

C 无法解析符号,c,eclipse-cdt,C,Eclipse Cdt,我有一个程序在EclipseC/C++cdt中告诉我“符号xxxx无法解析” 示例文件如下: 头文件:s.h: #ifndef S_H_ #define S_H_ typedef enum { MSG_ID_INVALID_TYPE = 0, #include "s0.h" } msg_type; #endif /* S_H_ */ 上述文件包括如下所示的头文件: 头文件s0.h MSG_ID_COMMAND1, MSG_ID_COOMAND2, /* * test.c

我有一个程序在EclipseC/C++cdt中告诉我“符号xxxx无法解析”

示例文件如下:

头文件:
s.h

#ifndef S_H_
#define S_H_

typedef enum {
    MSG_ID_INVALID_TYPE = 0,
    #include "s0.h"
} msg_type;

#endif /* S_H_ */
上述文件包括如下所示的头文件:

头文件
s0.h

MSG_ID_COMMAND1,
MSG_ID_COOMAND2,
/*
 * test.c
 *
 *  Created on: 2012-5-18
 *      Author: js
 */
#include "s.h"

int i = MSG_ID_COMMAND1;

main()
{
    print ("%d",i);
}
主文件
test.c

MSG_ID_COMMAND1,
MSG_ID_COOMAND2,
/*
 * test.c
 *
 *  Created on: 2012-5-18
 *      Author: js
 */
#include "s.h"

int i = MSG_ID_COMMAND1;

main()
{
    print ("%d",i);
}
Eclipse告诉我:
Symbol MSG\u ID\u COMMAND1无法解析

但在vc2008中该程序还可以

为什么?


//回答:塞思·卡内基。如果我们使用i=MSG\u ID\u INVALID\u TYPE,就可以了。

您创建的代码段没有编译,因为
print
函数不存在,并且没有用于定义它的include

您创建的代码段无法编译,因为
print
函数不存在,并且没有用于定义它的include 改变

typedef enum {
    MSG_ID_INVALID_TYPE = 0,
    #include "s0.h"

一些预处理器忽略没有左对齐的标记。VS 1没有,显然eclipse 1有。

改变

typedef enum {
    MSG_ID_INVALID_TYPE = 0,
    #include "s0.h"



一些预处理器忽略没有左对齐的标记。VS one没有,显然eclipse one有。

头文件
so.h
只有以下行
MSG\u ID\u COOMAND1,MSG\u ID\u COOMAND2,
如果是这样,我认为MSG\u ID\u COOMAND2@keety后面不应该有逗号,多余的逗号是合法的。@SethCarnegie谢谢你指出这一点out@user1402307尝试使用
MSG\u ID\u INVALID\u TYPE
查看是否有效。eclipse是否关心
\include
不从第一列开始?一个不相关的nit,但是
i
应该声明为
msg\u type
,而不是
int
。头文件
so.h
是否只有以下行
msg\u ID\u COOMAND1,msg\u ID\u COOMAND2,
如果是这样,我认为MSG\u ID\u COOMAND2@keety后面不应该有逗号,多余的逗号是合法的。@SethCarnegie谢谢你指出这一点out@user1402307尝试使用
MSG\u ID\u INVALID\u TYPE
查看是否有效。eclipse是否关心
\include
不从第一列开始?不相关的nit,但
i
应声明为
msg\u类型
,不是
int
。这是一个怪癖还是一个要求?我见过很多
#if
类型的东西-但从未遇到需要它的预处理器。
#
标记之间的空间很好。你能确定eclipse不能很好地支持该程序样式吗,或者是eclipse cdt bug?@Dave-我知道它没问题-是否需要它-从未遇到需要它的编译器。@kangjw我只关心C99标准-如果编译器不支持它-我不关心它做什么。这是怪癖还是要求-我见过很多
#如果
类型的东西-从未运行到需要它的预处理器虽然,
#
标记之间的.Space很好。您能确定eclipse不支持该程序样式吗,或者是eclipse cdt bug?@Dave-我知道它没问题-是否需要它-从未遇到想要它的编译器。@kangjw我只关心C99标准-如果编译器不支持它-我不关心它做什么。我的观点仍然站得住脚-你包括在哪里-或者你展示的确切示例是否产生了错误?包括在编译设置中的inc路径设置中。或者如果您想重复它,请在test.c文件头中添加stdio.h。是否包括它?你要么这样做,要么不这样做。我的观点仍然站得住脚——你包括在哪里——或者你展示的确切例子是否产生了错误?包括在编译设置中的inc路径设置中。或者如果您想重复它,请在test.c文件头中添加stdio.h。是否包括它?你要么做,要么不做。