1

注意 和 之间的some_name空格some_function。我在一个.c文件中看到了这个,想知道这里发生了什么。

int some_name some_function{

}

谢谢

编辑:

有问题的代码是:

int attribute_align_arg avcodec_open(AVCodecContext *avctx, AVCodec *codec)
    {
        return avcodec_open2(avctx, codec, NULL);
    }

它来自utils.c

4

2 回答 2

8

其中一部分很可能是一个扩展为空的宏(但服务于文档)或一些特殊属性,如 __stdcall、__declspec(noreturn)、__declspec(dllexport)...

编辑以反映新信息:

你的定义是这样的:

51 #ifndef attribute_align_arg
52 #if ARCH_X86_32 && AV_GCC_VERSION_AT_LEAST(4,2)
53 # define attribute_align_arg __attribute__((force_align_arg_pointer))
54 #else
55 # define attribute_align_arg
56 #endif
57 #endif
于 2013-06-17T00:23:39.597 回答
0

这看起来要么是非常丑陋的宏,要么是非常古老的 C。曾几何时,C 函数默认返回 int,并且总是(取决于实现)假设一个整数参数或允许可变数量的参数。

一些调用约定要求调用者提供参数然后清理它们,这样就可以了。(但是,如果被调用者,即“some_function”必须为参数本身清理内存,那么参数的数量是固定的)。

也就是说,我仍然强烈怀疑一些宏的使用,可能除了隐含的变量参数之外,尽管示例中的命名非常糟糕。原始代码是否包含任何大写关键字或其他指示宏使用的约定?即使没有这些约定,我仍然会怀疑宏。

编辑:问题中提供的代码已完全更改。“attribute_align_arg”可能是宏或特定于编译器的属性。剩下的是一个完全符合标准的 C 函数,带有指定的参数。因此,Balog 上面的答案是这里接受的答案。

于 2013-06-17T00:23:03.750 回答