Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 为什么可能需要包含一个源文件?_C - Fatal编程技术网

C 为什么可能需要包含一个源文件?

C 为什么可能需要包含一个源文件?,c,C,我要在嵌入式设备中移植h264编解码器。ffmpeg源代码使用以下结构: #undef CHROMA_IDC #define CHROMA_IDC 3 #include "h264_mc_template.c" static av_noinline void FUNC(hl_decode_mb_444)(const H264Context *h, H264SliceContext *sl) { ... } 为什么我需要包含这样一个源文件?“模板”后缀提示代码依赖于某些预处理器指令

我要在嵌入式设备中移植
h264
编解码器。ffmpeg源代码使用以下结构:

#undef  CHROMA_IDC
#define CHROMA_IDC 3
#include "h264_mc_template.c"

static av_noinline void FUNC(hl_decode_mb_444)(const H264Context *h, H264SliceContext *sl)
{
    ...
}
为什么我需要包含这样一个源文件?“模板”后缀提示代码依赖于某些预处理器指令

我查了一下,开始的时候

   #if   CHROMA_IDC == 1
   #   define MCFUNC(n) FUNC(n ## _420)
   #elif CHROMA_IDC == 2
   #   define MCFUNC(n) FUNC(n ## _422)
   #elif CHROMA_IDC == 3
   #   define MCFUNC(n) FUNC(n ## _444)
   #endif
请注意,在包含此文件之前,您必须定义色度(IDC 3)

这告诉预处理器在包含的文件中使用
define MCFUNC(n)FUNC(n###u 444)

源文件可以单独保存在makefile中,但有一个
-DCHROMA_IDC=3
指令,在这种情况下,由于多次重新定义,模板不能用于其他源文件(此源文件中的函数是
静态的
,以避免模板多次实例化时出现多次重新定义)


为什么要使用模板?可能是为了解决性能问题,以避免调用链和一些针对所需行为的分支测试
ffmpeg
无法承受编码功能的缓慢。

那么,为什么要包含C文件呢?恐怕这个问题对我来说有点难以理解。
h264\u mc\u模板。c
必须依赖于
CHROMA\u IDC
,因此它需要包含以生成正确的代码。红豆杉的意思是为什么包含源文件?c!=C++。只使用您正在使用的语言进行标记,除非两者实际上都相关。