注册 登录
编程论坛 C++教室

不懂这三段代码是啥意思……

erikshe2003 发布于 2010-05-25 15:40, 711 次点击
第一段:cal.c
int cal( int n )
{
    if( 1 == n)
    {
        return 1;
    }
    else
    {
        return n * cal( n-1 );
    }
}
第二段:cal.h
#ifndef CAL_H_
#define CAL_H_
  int cal(int n);
#endif /* CAL_H_ */
第三段:main.c
#include <stdio.h>
#include"cal.h"
int main()
{
    int n=5;
    n=cal(n);
    printf("%d\n", n);
    return  0;
}
有哪个好心人来回答下?我是初学者,初学者……
对了,好像根据这三段代码可以做一个什么加减乘除的东东……

[ 本帖最后由 erikshe2003 于 2010-5-25 15:44 编辑 ]
8 回复
#2
erikshe20032010-05-25 15:40
自己顶~~~~~~~~~~~~~~~~
#3
erikshe20032010-05-25 16:52
没人吗
#4
LUNNAN2010-05-25 17:09
我想lz理解错了吧!第一个文件是cal函数的定义,用于求阶乘,第二个文件是一个头文件,在这其中声明了cal函数!第三个文件就是主函数文件了!
#5
fanfan3202010-05-25 17:44
第一段是子函数cal ,用函数嵌套求n!,第2个是文件的头文件,用于声明函数的,第3个就是主函数了。程序执行是从主函数开始,中间调用子函数,最后从主函数结束.
不知楼主明白了没?
#6
gaoce2272010-05-26 15:22
4.5楼解释得不错,学习一下,尤其第二个函数,好像是什么预处理。好想能求出5的阶乘吧!

下面的是粘过来的:

1. C++中的头文件
1.1 标准库中的头文件
C++标准库中的一切内容都被放在名字空间std中(名字空间中的内容对外是不可见的),但是带来了一个新问题,无数现有的C++代码都依赖于使用了多年的伪标准库中的功能,如声明在<iostream.h>等头文件中的功能,使用std包装标准库导致现有代码的不可用,为了兼容这种情况,标准委员会为包装了std的那部分标准库创建了新的头文件,新的头文件的文件名与旧的一样,只是没有.h这个后缀,如<iostream.h>就变成了<iostream>。对于C头文件,采用同样的方法,但还在每个头文件名前加了字符c,如<string.h>就变成了<cstring>,<stdio.h>变成了<cstdio>。最好使用新的文件头,使用新的文件头的C++程序,需要使用using namespace std或者using namespace std::指定的类名,等方法来使需要的类对于我们的代码可视。
1.2 自定义的头文件
为了防止头文件被重复引用,最好使用预处理定义,如下所示:
#ifndef MYHEAD_H
#define MYHEAD_H
……//头文件中的内容
#endif
1.3 预处理相关知识
(1) #ifdef :判断一个预处理常量是否被定义,如#infef DEGUG
(2) #ifndef:判断一个预处理常量是否没被定义
(3) #define:定义一个预处理常量,如#define DEBUG
(4) #include
(5) #endif
(6) 对预处理常量的定义还可以在编译时进行,如CC –D DEBUG main.c
(7) 编译C++程序时,编译器自动定义了一个预处理器名字__cplusplus(注意前面有两个下划线),因此可以根据这个来判断该程序是否是C++程序,以便有条件地包含一些代码,如:
#ifndef MYHEAD_H
#define MYHEAD_H
#ifdef __cplusplus
extern "C" {
#endif
int DMpostprocessing();
#ifdef  __cplusplus
}
#endif
#endif
(8) 在编译C程序时,编译器会自动定义预处理常量__STDC__。当然__cplusplus和__STDC__ 不会同时被定义;
(9) 另外两个比较有用的预定义常量是__LINE__(记录文件已被编译的行数)和__FILE__(正在被编译的文件名称)。使用如下:
if ( I==0 ) cerr<< “error:”<< __FILE__<<” line:”<<__LINE__<<”I must be ..”
(10) __DATE__:编译日期
(11) __TIME__:编译时间
(12) C库头文件的C++名字总是以字母C开头,后面去掉.h,如assert.h在C++中为cassert;
(13) 在C++中头文件后缀各不相同,因此标准的C++头文件没有指定后缀 。


[ 本帖最后由 gaoce227 于 2010-5-26 15:28 编辑 ]
#7
2010-05-26 23:09
第一段,函数的定义。第二段,函数的声明。第三段,主函数。功能求阶乘。
#8
南国利剑2010-05-28 13:32
楼上的几位说的对。
顶!
#9
xin3109232010-05-28 17:25
我也顶一下
1