CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  新手乐园

急急急~~!!!高手进来帮忙,绝对给分~~~~~~~!!!

楼主fengbaotiaorulei(风暴跳如雷)2004-09-04 16:21:39 在 C/C++ / 新手乐园 提问

此问题问了N个人都没有合理的解释,高手帮忙  
   
  primer   C++的例程序中常用到此类情况  
   
  #ifndef   STOCK_H_  
  #define   STOCK_H_  
   
   
  class   Stock  
  {  
      public:  
          stock();  
          stock(const   char   *   co,int   n,   double   pr);  
          //..................  
      private:  
          char   company[30];  
          int   shares;  
  }  
  #endif  
   
   
   
   
  假定现在前面的所有的头文件对STOCK_H_没有定义,则根据#ifndef..#endif的定义规则:执行#difine这一句,现在想问就算执行了  
  #define   STOCK_H_  
  class   Stock  
  {  
  //.........  
  }  
  会有什么样的结果呢?我问的是这一句干了些什么?把STOCK_H_定义成了什么?它和Stock有关系么?  
  前些日子有人说STOCK_H_和Stock之前没有关系,但有人说有关系(定义一个类),如果说没有关系为什么要把这个类定在这里?把Stock定义到外面不是更好,假如定义到外面了就成了:  
  #ifndef   STOCK_H_  
  #define   STOCK_H_  
  #endif  
   
   
  class   Stock  
  {  
      public:  
          stock();  
          stock(const   char   *   co,int   n,   double   pr);  
          //..................  
      private:  
          char   company[30];  
          int   shares;  
  }  
  这样子#define   STOCK_H_似乎什么也没有干?  
   
  又假如它们之前有关系,他们之前是什么关系?是不是把STOCK_H_定义成了Stoct的一个别名?  
   
  本人对此一直比解疑惑,实在不解,请高手给一个解答  
   
  问题点数:50、回复次数:11Top

1 楼keiy()回复于 2004-09-04 16:24:41 得分 2

这个#define为防止.h被调两次,与vc++   的#pragma   once功能相同  
  Top

2 楼fengbaotiaorulei(风暴跳如雷)回复于 2004-09-04 16:30:48 得分 0

请问那个class   Stock   在这里是干嘛的?Top

3 楼xteaj(半桶水)回复于 2004-09-04 16:31:01 得分 3

如果一个头文件被包含两次,其中定义的变量和类型都会重复定义。  
  用了#ifndef.....这此宏命令是防止重复定义。  
  如果该宏包含部分已经定义,那在#endif之前的代码就会被省略。  
  所以,不能移到外面。Top

4 楼fengbaotiaorulei(风暴跳如雷)回复于 2004-09-04 16:35:39 得分 0

我现在想知道   STOCK_H_和类Stock之间的关系?Top

5 楼yyj1982(一切从头开始,好好学英语)回复于 2004-09-04 16:44:58 得分 30

它们的定义没有直接关系。  
   
  之所以把STock类的定义放在#ifndef   STOCK_H_  
                                                    #define   STOCK_H_  
                                                    ...............  
                                                    #endif  
  里面是为了保证在程序连接时不重复包含STock类的定义,是源程序的各个文件能够正确连接。  
   
  具体意思如下:  
  #ifndef   STOCK_H_                     如果在源程序的其它文件中不包含STOCK_H_宏的定义则  
  #define   STOCK_H_                     定义宏STOCK_H_并包含类STock的定义,如果在源程序的其它  
                                                      文件中包含STOCK_H_宏的定义则不再定义宏STOCK_H_和不再包  
                                                      含类STock的定义。  
  #endif                                         这一行表明这种结构的结束。Top

6 楼rorot(rorot)回复于 2004-09-04 16:58:24 得分 5

晕~  
   
  #ifndef   XXX  
  #define   XXX  
  class   T{   ...   };  
  #endif   //   #ifndef   XXX  
   
  如果前面的所有文件里没有定义XXX,   那么当使用这个头文件时,将定义一个label:   XXX标志  
  同时暴露了class   T的定义.   然后当其他的文件企图再次包含这个头文件时,由于这个xxx标记已经定义,就不会再包容class   T,   从而不会导致class   T重复定义.  
  Top

7 楼Paris_Luo(不懂)回复于 2004-09-04 17:05:59 得分 5

#ifndef   STOCK_H_  
  #define   STOCK_H_  
  ...  
  ...  
  #endif  
   
  这些是预编译指令,意思是,在这之前如果没有定义STOCK_H_的话,就定义STOCK_H_,然后  
  ...  
  ...一直到#endif的部分才会被编译,否则编译器就忽略这部分了。  
   
  目的是为了防止一个头文件被两次包括,造成重复定义。  
  Top

8 楼Paris_Luo(不懂)回复于 2004-09-04 17:09:03 得分 5

我现在想知道   STOCK_H_和类Stock之间的关系?  
   
  --〉STOCK_H_只是个代号而已,你可以写成任何你喜欢的样子,只不过要统一而已.和类Stock之间没多大关系,当然不能说没关系。  
   
  例如这样写效果是一样的  
  #ifndef   __AAAAA  
  #define   __AAAAA  
  class   Stock  
  {  
      public:  
          stock();  
          stock(const   char   *   co,int   n,   double   pr);  
          //..................  
      private:  
          char   company[30];  
          int   shares;  
  }  
  #endifTop

9 楼fengbaotiaorulei(风暴跳如雷)回复于 2004-09-04 17:14:32 得分 0

哦,我理解了,特别是rorot的解释,让我明白了,以上参与的朋友都会有分可得,不过给rotot     50分,其它的都给20分,因为穷,不能给那么多了,在问一下怎么给分,我不会给分Top

10 楼fengbaotiaorulei(风暴跳如雷)回复于 2004-09-04 17:19:12 得分 0

错了,是给yyj1982       其它的20分,我刚看错了,不好意思Top

11 楼fengbaotiaorulei(风暴跳如雷)回复于 2004-09-04 17:38:28 得分 0

我看了,最多只能给50分啊,那只能分开给了,不好意思啊Top

相关问题

  • 求助 散分100 急 急急急急急急急急急
  • 高分求ASP用户密码如何加密?急!急!急!急!急!急!急!急!急!急!急!急!急!急!急!急!
  • 急急急急急急!!!!!!!!!高分求助!!!!!!!!!
  • 急急急急急急急急急...在线等...解决放分
  • ■■■■■■■■重分寻找Formula_one控件,急急急急急急急急急急急急急急急■■■■
  • excel问题,100分请教大家,急急急急急急急急急急急!!!!!!!!!!
  • 百分求购sqlserver2000可以在xp2下的版本急!急!急!急!急!急!急!急!急!急!急!急!急!急!
  • 急急急急急急急急!!!!!! 150分!!快啊!!!
  • .net问题,急急急急急急急急,有高分相送
  • !!!!!!!!!急急急,有分

关键词

  • 文件
  • 定义
  • stock
  • ifndef
  • 类
  • 高手
  • endif
  • 关系
  • 源程序
  • 宏

得分解答快速导航

  • 帖主:fengbaotiaorulei
  • keiy
  • xteaj
  • yyj1982
  • rorot
  • Paris_Luo
  • Paris_Luo

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo