C:这是什么语法?

时间:2012-12-11 00:15:13

标签: c syntax

我正在阅读Bungie为BLAM实施的'基于标签的'资源系统上的article!游戏引擎。我发现了一种神秘的语法(我认为C结构?)我想知道是什么允许这个?这种语法怎么有效?它通过什么方法实现了?

我已粘贴以下问题的片段。

TAG_GROUP(
sound_environment,
SOUND_ENVIRONMENT_TAG,
sizeof(sound_environment))
{
     {_field_real, "room intensity"},
     {_field_real, "room intensity hf"},
     {_field_real, "room rolloff (0 to 10)"},
     {_field_real, "decay time (.1 to 20)" },
     {_field_real, "decay hf ratio (.1 to 2)"},
     {_field_real, "reflections intensity:dB[-100,10]"},
     {_field_real, "reflections delay (0 to .3):seconds" },
     {_field_real, "reverb intensity:dB[-100,20]"},
     {_field_real, "reverb delay (0 to .1):seconds"},
     {_field_real, "diffusion"},
     {_field_real, "density"},
     {_field_real, "hf reference(20 to 20,000)},
}; 

3 个答案:

答案 0 :(得分:2)

这是关键部分

TAG_GROUP(
sound_environment,
SOUND_ENVIRONMENT_TAG,
sizeof(sound_environment))

这表明有一个宏“TAG_GROUP”做了一些魔术。

答案 1 :(得分:1)

TAG_GROUP看起来像一个宏;如果是这样,那么它正在扩展到其他东西,在这种情况下,语法可能是正确的,这取决于它正在扩展到什么。

例如,如果TAG_GROUP正在扩展到2D数组甚至是结构数组,那么该初始化是有效的,因为它是标准的初始化列表。

采取以下程序,编译:

int main() 
{
    const char* _field_real = "xyz";
    const char* a[12][2] = {
        {_field_real, "room intensity"},
        {_field_real, "room intensity hf"},
        {_field_real, "room rolloff (0 to 10)"},
        {_field_real, "decay time (.1 to 20)" },
        {_field_real, "decay hf ratio (.1 to 2)"},
        {_field_real, "reflections intensity:dB[-100,10]"},
        {_field_real, "reflections delay (0 to .3):seconds" },
        {_field_real, "reverb intensity:dB[-100,20]"},
        {_field_real, "reverb delay (0 to .1):seconds"},
        {_field_real, "diffusion"},
        {_field_real, "density"},
        {_field_real, "hf reference(20 to 20,000)"},
    };     
    return 0;
}

现在,想象一下,如果TAG_NAME使用参数来构建适当的定义并添加了=。基本上,它构建了const char * a [12] [2](或者它正在使用的任何类型)的等价物。

当你看到这样的代码时,一个好的经验法则是思考宏观,并考虑哪些替换可以导致合法代码。此外,我经常看到的一个约定是,看起来像函数但是全部大写的名称都是宏。

答案 2 :(得分:0)

TAG_GROUP看起来像一个宏,用于初始化数据结构,方便一点。赠品是在大括号内,一切看起来像初始化代码。 因此,TAG_GROUP不是函数签名的宏,而是初始化排序数组的宏。