注意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
答案 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的上述答案是可以接受的。