小弟看到一段程序 实在想不通 请大家指点
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




