关于C++的头文件.h和.cpp(实现类)文件
来源:互联网 发布:c primer plus知乎 编辑:程序博客网 时间:2024/06/03 14:49
头文件(.h):
写类的声明(包括类里面的成员和方法的声明)、函数原型、#define常数等,但一般来说不写出具体的实现。比如下面的ffmpeg的编码的一个头文件avcodec.h
开头多说一句,这个ifndef是if not define的缩写,就是,如果没有定义,就执行下面的#define,防止编译出错#ifndef AVCODEC_AVCODEC_H#define AVCODEC_AVCODEC_H常数#define SLICE_FLAG_CODED_ORDER 0x0001 ///< draw_horiz_band() is called in coded order instead of display#define SLICE_FLAG_ALLOW_FIELD 0x0002 ///< allow draw_horiz_band() with field slices (MPEG2 field pics)#define SLICE_FLAG_ALLOW_PLANE 0x0004 ///< allow draw_horiz_band() with 1 component at a time (SVQ1)方法void av_free_packet(AVPacket *pkt);结尾#endif
在开头和结尾处必须按照如上样式加上预编译语句,对于AVCODEC_AVCODEC_H你可以写成任何你想要的名字,但推荐这样写,和文件名保持一致,
源文件(.cpp):
源文件主要写实现头文件中已经声明的那些函数的具体代码。需要注意的是,开头必须#include一下实现的头文件,以及要用到的头文件。那么当你需要用到自己写的头文件中的类时,只需要#include进来就行了。
比如:
#include <libavcodec/avcodec.h>extern "C"//返回类型Stringjstring//avcodecinfo为方法名,Java不动,com这一堆就是包名了,MainActivity就是展示的界面了,Java_com_great_xiaohaihai_myffmpeg_MainActivity_avcodecinfo( JNIEnv *env, jobject) { char info[40000] = {0}; av_register_all(); AVCodec *c_temp = av_codec_next(NULL); while (c_temp != NULL) { if (c_temp->decode != NULL) { sprintf(info, "%sdecode:", info); } else { sprintf(info, "%sencode:", info); } switch (c_temp->type) { case AVMEDIA_TYPE_VIDEO: sprintf(info, "%s(video):", info); break; case AVMEDIA_TYPE_AUDIO: sprintf(info, "%s(audio):", info); break; default: sprintf(info, "%s(other):", info); break; } sprintf(info, "%s[%10s]\n", info, c_temp->name); c_temp = c_temp->next; } return env->NewStringUTF(info);}
.h叫做头文件,它是不能被编译的。“#include”叫做编译预处理指令,可以简单理解成,在1.cpp中的#include”1.h”指令把1.h中的代码在编译前添加到了1.cpp的头部。每个.cpp文件会被编译,生成一个.obj文件,然后所有的.obj文件链接起来你的可执行程序就算生成了。
你要在.h文件中严格区分声明语句和定义语句。好的习惯是,头文件中应只处理常量、变量、函数以及类的声明,变量的定义和函数的实现都应该在源文件.cpp中进行。
阅读全文
0 0
- 关于C++的头文件.h和.cpp(实现类)文件
- 类的静态成员(外加 头文件.h和实现文件.cpp的用法)
- c中头文件在cpp文件中引用和.h文件引用的思考
- Cpp--关于windows.h头文件
- 关于.cpp和.h文件的区别
- Source Insight技巧:头文件和实现文件快捷键打开的方式--.h .cpp
- C++的头文件(.h)和实现文件(.cpp)分别写什么
- C/C++关于string.h头文件和string类
- C/C++关于string.h头文件和string类
- C/C++关于string.h头文件和string类
- 头文件.h和源文件.cpp的关系
- 让gvim的NERDTree只显示.h .c .cc .cpp等头文件和源文件
- c/c++头文件与cpp文件的切换实现
- 关于.h文件和.cpp文件
- 头文件和.cpp 或.c 文件之间的关系
- .c和.h文件的区别(头文件与之实现文件的的关系~ )
- .c和.h文件的区别(头文件与之实现文件的的关系~ )
- .c和.h文件的区别(头文件与之实现文件的的关系~ )
- java逻辑运算符
- 182. Duplicate Emails
- DO_ONCE 和 printk_once
- 样式继承
- JavaScript中location.host 与 location.hostname 的区别
- 关于C++的头文件.h和.cpp(实现类)文件
- Python匿名函数详解
- 点击Eclipse.exe时弹出JVM的错误窗口
- WIN7(32位)VS2010+openCV 2.4.10+PCL 1.6.0+CUDA 6.5.14+CMake 3.2.1+SSBA-3.0配置
- 桃夭
- Netty实现按字节解析的socket协议
- VMware NSX-MX内部信息详解
- XML Schema简介
- 最全技术图谱!