c++ 在头文件中定义的变量不可用?还有一个问题就是头文件的ifndef __tMAIN_H有啥用呢?

tmain.h头文件-----------------------------------#ifndef__tMAIN_H#define__tMAIN_Htypedefs... tmain.h头文件
-----------------------------------
#ifndef __tMAIN_H
#define __tMAIN_H

typedef struct
{
int aa;
long int bb;
unsigned char cc;
}tStruct;
#define EME int;
#endif
--------------------------------
主函数 main.c
#include<iostream>
using namespace std;
#include"tmain.h"
void main()
{
EME a=5;
sStruct b;
}
----------------------------------
出错信息:
警告 1 warning C4091: “”: 没有声明变量时忽略“int”的左侧 e:\计算机知识\st750实验\c测试\c测试\c测试\main.cpp 6
错误 2 error C2065: “a”: 未声明的标识符 e:\计算机知识\st750实验\c测试\c测试\c测试\main.cpp 6
错误 3 error C2065: “sStruct”: 未声明的标识符 e:\计算机知识\st750实验\c测试\c测试\c测试\main.cpp 7
错误 4 error C2146: 语法错误 : 缺少“;”(在标识符“b”的前面) e:\计算机知识\st750实验\c测试\c测试\c测试\main.cpp 7
错误 5 error C2065: “b”: 未声明的标识符 e:\计算机知识\st750实验\c测试\c测试\c测试\main.cpp 7
展开
 我来答
松甜恬0Je4ba
2011-05-20 · TA获得超过2.6万个赞
知道大有可为答主
回答量:7475
采纳率:100%
帮助的人:3284万
展开全部
1:首先#define EME int;
不对,如果要给int声明一个同义词,使用typedef,正确是:typedef int EME;
2:sStruct没有定义啊,tmain.h中定义的是tStruct,这里写错了。
3:#ifndef __tMAIN_H
#define __tMAIN_H
最主要目的是防止头文件的重复包含和编译。类似if,else的用法。
追问
请问这个#ifndef __tMAIN_H 和我的tmain.h头文件有什么关系吗? 编译器是不是会知道__tMAIN_H就是tmain.h,从而在多个.cpp文件中不重复引用头文件啊!
追答
是的  编译器会知道__tMAIN_H就是tmain.h,这应该是你借助IDE环境自动生成的,编译器一般都会有自己定义宏的方式。
sun_siliang
2011-05-20 · TA获得超过2.6万个赞
知道大有可为答主
回答量:9913
采纳率:100%
帮助的人:4429万
展开全部
#ifndef __tMAIN_H
#define __tMAIN_H
把上面两行交换一下,试试!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
kwydwuf
2011-05-20 · TA获得超过7409个赞
知道大有可为答主
回答量:1527
采纳率:71%
帮助的人:1972万
展开全部
#define EME int
这一句后面多了一个分号,删掉。
sStruct b; 这一句应该是 tStruct b;

#ifndef __tMAIN_H
#define __tMAIN_H
是用来防止这个头文件被重复include的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
V亮剑
2011-05-20 · TA获得超过287个赞
知道小有建树答主
回答量:263
采纳率:0%
帮助的人:89.6万
展开全部
tmain.h头文件
-----------------------------------
#ifndef __tMAIN_H
#define __tMAIN_H

typedef struct sStruct
{
int aa;
long int bb;
unsigned char cc;
}tStruct;

#endif
--------------------------------
主函数 main.c
#include<iostream>
using namespace std;

#define EME int

#include"tmain.h"
void main()
{
EME a=5;
sStruct b;
}
----------------------------------
这是宏定义的一种,它可以根据是否已经定义了一个变量来进行分支选择,一般用于调试等等.实际上确切的说这应该是预处理功能中三种(宏定义,文件包含和条件编译)中的一种----条件编译。 C语言在对程序进行编译时,会先根据预处理命令进行“预处理”。C语言编译系统包括预处理,编译和链接等部分。
  #ifndef x //先测试x是否被宏定义过
  #define x
  程序段1 //如果x没有被宏定义过,定义x,并编译程序段1
  #endif
  程序段2 //如果x已经定义过了则编译程序段2的语句,“忽视”程序段1。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式