C 无法解析符号
我有一个程序在EclipseC/C++cdt中告诉我“符号xxxx无法解析” 示例文件如下: 头文件: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
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。是否包括它?你要么做,要么不做。