CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

小弟看到一段程序 实在想不通 请大家指点

楼主lisiyong(小样)2006-03-02 21:08:51 在 C/C++ / C语言 提问

 
  FILE *fp;//定义文件指针  
  char ch;  
                  char   ptr;  
  if((fp   =   fopen("F:\\1.YJB","r"))   ==   NULL)  
  {  
  fprintf(stderr,   "Cannot   open   output   file.\n");   /*当文件为空时退出*/  
  exit(0);  
  }  
  else  
  {  
  while((ch=fgetc(fp))!=EOF)  
  {  
   
                                                  //第一种情况:略去/**/  
  if(ch=='/'&&*(fp->_ptr)=='*')  
  {  
  fgetc(fp);  
  while((ch=fgetc(fp))!=EOF)  
  {  
  if(ch   ==   '*'   &&   *(fp->_ptr)=='/')  
  {  
  fgetc(fp);  
  break;  
  }  
  }  
  continue;  
  }  
  fp->_ptr   请问ptr前面为什么有一下划线_,去掉反而不正确了呢?  
  问题点数:50、回复次数:7Top

1 楼steedhorse(晨星)回复于 2006-03-02 21:23:33 得分 20

没啥啊。FILE是个结构体,你的问题说明FILE结构体有个字段叫“_ptr”,而没有任何字段叫“ptr”。  
  C语言的标志符(比如变量名、函数名、字段名等)允许以下划线开头,过个总该知道吧。Top

2 楼ruodeer(看我的个性签名都给我分)回复于 2006-03-02 22:23:36 得分 5

_ptr是结构体的成员变量  
  类库已经定义好的了   就是规定的东西,改掉当然要错Top

3 楼A_B_C_ABC(黄瓜@YouCanDoIt)回复于 2006-03-02 22:58:55 得分 5

好象C库里的很多变量名都以'_'开头,而使用C库的程序员一般不以'_'开头命名变量,所以减少了很多重名的机会。是不是以'_'开头都符合命名规则,在含义上没有不同。Top

4 楼steedhorse(晨星)回复于 2006-03-02 23:00:03 得分 5

对,语法含义上没有什么不同。Top

5 楼ox_thedarkness()回复于 2006-03-02 23:25:41 得分 5

厄,确切地说:  
  C和C++中,自定义的全局名称,以   _   开头的为系统保留。(就是说,说不定哪天就跟下一个版本的标准库内容冲突了)  
  但是非全局名称没问题。Top

6 楼duduhaha(三人行必有我师)回复于 2006-03-02 23:34:16 得分 5

给你看看unix   v7中<stdio.h>的内容.里面有#define     FILE struct   _iobuf这个语句,你看看结构体里有_ptr这个变量吧.FILE实际上是个结构体,学习unix的源码能让我们看到很多东西.  
   
  #define BUFSIZ 512  
  #define _NFILE 20  
  #   ifndef   FILE  
  extern struct _iobuf   {  
  char *_ptr;  
  int _cnt;  
  char *_base;  
  char _flag;  
  char _file;  
  }   _iob[_NFILE];  
  #   endif  
   
  #define _IOREAD 01  
  #define _IOWRT 02  
  #define _IONBF 04  
  #define _IOMYBUF 010  
  #define _IOEOF 020  
  #define _IOERR 040  
  #define _IOSTRG 0100  
  #define _IORW 0200  
   
  #define NULL 0  
  #define FILE struct   _iobuf  
  #define EOF (-1)  
   
  #define stdin (&_iob[0])  
  #define stdout (&_iob[1])  
  #define stderr (&_iob[2])  
  #define getc(p) (--(p)->_cnt>=0?   *(p)->_ptr++&0377:_filbuf(p))  
  #define getchar() getc(stdin)  
  #define   putc(x,p)   (--(p)->_cnt>=0?   ((int)(*(p)->_ptr++=(unsigned)(x))):_flsbuf((unsigned)(x),p))  
  #define putchar(x) putc(x,stdout)  
  #define feof(p) (((p)->_flag&_IOEOF)!=0)  
  #define ferror(p) (((p)->_flag&_IOERR)!=0)  
  #define fileno(p) p->_file  
   
  FILE *fopen();  
  FILE *freopen();  
  FILE *fdopen();  
  long ftell();  
  char *fgets();  
  Top

7 楼jixingzhong(瞌睡虫·星辰)回复于 2006-03-03 09:19:00 得分 5

fp->_ptr   请问ptr前面为什么有一下划线_,去掉反而不正确了呢?  
  ------------------------------  
  FILE   结构体成员中   有   _ptr,    
  没有   ptr     ....Top

相关问题

  • 登录程序出错 请指点
  • 程序崩溃,请高手指点!
  • 一段小小的Java程序,请指点指点!!!多谢!
  • 程序烧不进去,请前辈指点指点
  • Delphi程序转成C#程序的问题,请达人指点!
  • 各位做网络小偷程序的高手进来看看指点指点
  • 请指点:哪儿有Visual C++ 例程源代码程序?
  • 一C++程序,不是很懂,请C++高手指点...
  • 停止异步程序怎么不行?请指点. :)
  • 我有一个程序问题,请高手指点!

关键词

  • 下划线
  • 结构
  • 变量
  • iob
  • fp
  • 开头
  • iobuf
  • ptr
  • fgetc
  • 结构体

得分解答快速导航

  • 帖主:lisiyong
  • steedhorse
  • ruodeer
  • A_B_C_ABC
  • steedhorse
  • ox_thedarkness
  • duduhaha
  • jixingzhong

相关链接

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

广告也精彩

反馈

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