这是什么样的函数调用?

时间:2013-06-17 00:15:55

标签: c

注意some_namesome_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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

某些调用约定要求调用者提供参数然后将其清理,以便这样做。 (但是,如果被调用者,即'some_function',必须为参数本身清理内存,那么参数的数量是固定的。)

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

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