关于#define的3个疑问

ScorpioZZR 2004-05-03 04:23:12
1.如果 #define FILENAME_H 那是什么意思?本来“#define A B”,可现在没有B是什么意思呢?
2.
请解释下面这里是什么意思?(要逐行的解释哦)
===
/*存放在头文件hello.h中*/
#ifndef FILENAME_H /**/
#define FILENAME_H /**/
char * hello(char *); /**/
#endif /**/

===
3.
为什么下面程序中出现两个char *hello()这种语句?
分别是什么含意?

-----------
/*存放在头文件hello.h中*/
#ifndef FILENAME_H
#define FILENAME_H
char * hello(char *);
#endif

/*存放在源代码文件hello.cpp中*/
#include <stdio.h>
#include <string.h>
#include "hello.h"
char*hello(char *name){
/*这段省略*/
}




...全文
80 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
cngdzhang 2004-05-03
  • 打赏
  • 举报
回复
1
#define FILENAME_H
也是定义一个宏,只是它替换出的串,是一个空串,目的是定义这个宏作编译预处理的标志
其实
你改为
#define FILENAME_H xxxxx
一样没问题,编译器只在乎有没有这个宏存在

2
这里主要是编译预处理只是了

#ifndef FILENAME_H /*如果没有定义宏FILENAME_H*/

#define FILENAME_H /*则定义FILENAME_H,这是为了避免头文件的重复引入*/
char * hello(char *); /*声明函数原形*/

#endif /*和 #ifndef 对应标志结束*/

3

=================这是函数原形声明
/*存放在头文件hello.h中*/
#ifndef FILENAME_H
#define FILENAME_H
char * hello(char *);
#endif


=================这是函数实现
/*存放在源代码文件hello.cpp中*/
#include <stdio.h>
#include <string.h>
#include "hello.h"
char*hello(char *name){
/*这段省略*/
}

newegg2002 2004-05-03
  • 打赏
  • 举报
回复
我这样来理解:
1;你所说的#define A B,这只是宏命令,,简单替换嘛..
而#define FILENAME_H 这个呢,则是预编译命令,,表示开始编译此标志符及其以下代码嘛..直到遇到其他命令为止..
2.;那每一行的意思也就是说,如果没有编译(#ifndef)过"FILENAME_H"这个标识符,,则编译(#define)下面的,,当然啊.如果这个有过编译了.此处条件为假,那当然也用不着往下编译了..最后结束编译(#endif);
3;也就是楼上说的那样了..
另外:因为"FILENAME_H"只是个标识符嘛.所以这儿是什么都行,,可以是"A"之类的任何合法标志符的,,当用VC Insert class的方法加入类的时候,你会发现,,这后面的字符很常..我想那也无所谓,,所重复吧,,
不知道是不是这样.有些概念有点乱,但我是尽力了的,,
freefalcon 2004-05-03
  • 打赏
  • 举报
回复
1.如果 #define FILENAME_H 那是什么意思?本来“#define A B”,可现在没有B是什么意思呢?

可以理解成"定义"了FILENAME_H这么一个符号,有时候也可以理解成将FILENAME_H定成“空”

2.
请解释下面这里是什么意思?(要逐行的解释哦)
===
/*存放在头文件hello.h中*/
#ifndef FILENAME_H /**/ //如果还没有定义FILENAME_H的话,那么就编译下面#endif之前的代码
#define FILENAME_H /**/ //定义FILENAME_H,这样这个头文件只能被包含一次,因为第一次包含此头文件时,FILENAME_H还没有定义,再包含此文件时FILENAME_H就定义了,上面的#ifndef测试为假,所以后面的代码不会被再次包含,避免了全局变量的重复定义
char * hello(char *); /**/
#endif /**/

===
3.
为什么下面程序中出现两个char *hello()这种语句?
分别是什么含意?

-----------
/*存放在头文件hello.h中*/
#ifndef FILENAME_H
#define FILENAME_H
char * hello(char *); //这是声明
#endif

/*存放在源代码文件hello.cpp中*/
#include <stdio.h>
#include <string.h>
#include "hello.h"
char*hello(char *name){ //这是定义
/*这段省略*/
}
ScorpioZZR 2004-05-03
  • 打赏
  • 举报
回复
补充一下第一个:如果有#define A B则对A进行宏替换为B;如果有这么一种写法:“#define A”那意味着什么呢?

70,020

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧