QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 914|回复: 3

[b]一个关于宏的问题。[/b]

[复制链接]
发表于 2005-7-31 23:18:52 | 显示全部楼层 |阅读模式
我在做关于“出错处理”的实验,书上介绍到了两个宏,_LINE_和_FILE_。在程序中也用到了,但是编译是却显示没有定义。不知道是哪里有问题了。请大家帮忙解决一下程序代码如下(头文件filefcn.h 和函数描述filefcn.c  主函数testmacs.c):

/*
*filefcn.h -A function to open files
*/

#ifndef FILEFCN_H_
#define FILEFCN_H_

int open_file
             (FILE **fp, char *fname, char *mode, int line, char *file)

#endif






/*
*filefcn.c -Using _FILE_ and _LINE_
*/

int open_file
             (FILE **fp, char *fname, char *mode, int line, char *file)
{
        if(*fp=fopen(fname,mode))==NULL)
          {
                fprintf(stderr,"[%s:%d]open_file() failed\n",file,line);
                return 1;
           }
          return 0;
}








/*
*testmacs.c - Exercise the function defined in filefcn.c
*/

#include<stdio.h>
#include<stdlib.h>
#include"filefcn.h"

int main(void)
{
     FILE *fp;
     
     //文件foo_bar 已存在
   if(open_file(&fp,"foo_bar","w", _LINE_, _FILE_))
      {
            exit(EXIT_FAILURE);
       }
     else
       {
           fputs("This text proves we scribbled in the file.\n".fp);
           fclose(fp);
       }

       //文件bar_bar 不存在
   if(open_file(&fp,"bar_bar","w", _LINE_, _FILE_))
      {
            exit(EXIT_FAILURE);
       }
     else
       {
         
           fclose(fp);
       }
   
       return 0;
}



用gcc编译(gcc testmacs.c filefcn.c -o testmacs),得到的结果为
'_LINE_' undeclared......
......
'_FILE_'undeclared.......
发表于 2005-8-1 12:39:30 | 显示全部楼层
你的_LINE__和FILE_确实没有定义啊,我没找到你在哪里定义的
回复

使用道具 举报

发表于 2005-8-1 13:33:14 | 显示全部楼层
_LINE_和_FILE_是编译器内部定义的宏 vc是肯定有的 gcc这里没用过
回复

使用道具 举报

 楼主| 发表于 2005-8-2 00:35:50 | 显示全部楼层
原来是这样 :-) 谢谢fsilence和wsm两位:)谢谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-5 15:52 , Processed in 0.044009 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表