“什么是”呢;IsA();C语言中的函数?

“什么是”呢;IsA();C语言中的函数?,c,postgresql,C,Postgresql,在我现在使用的不同项目中的纯C代码中,我不断遇到函数“IsA()”,它返回一个布尔值并检查一个结构的两个实例是否属于同一个结构。我想是吧 其中一项: for(i=0;i

在我现在使用的不同项目中的纯C代码中,我不断遇到函数“IsA()”,它返回一个布尔值并检查一个结构的两个实例是否属于同一个结构。我想是吧

其中一项:

for(i=0;i
我需要将一些C代码移植到其他严格类型的语言中。因此,我需要知道“isA()”是如何在后台实现的。但我在任何地方都没有找到它。应该是在某个库中定义的


在哪里可以找到它的定义?

IsA
是在
Postgresql
源代码的头文件中定义的宏。

IsA
是在
Postgresql
源代码的头文件中定义的宏。

可以吗?请注意
IsA()
必须是一个宏,因为它将类型名作为第二个参数,并且(标准)C中没有函数可以这样做。这可能意味着它是在头文件中定义的-
#define IsA(pointer,typename)…黑魔法…
。可以吗?请注意
IsA()
必须是宏,因为它将类型名作为第二个参数,并且(标准)C中没有函数可以这样做。这可能意味着它是在头文件中定义的-
#定义IsA(指针,类型名)…black magic…
。对。这是PostgreSQL特有的,与C无关。您是如何在源代码中找到定义的?您在本地下载了吗?没有。不需要在本地下载源代码。您可以在PostgreSQL的官方存储库中搜索源代码,您应该知道h如何在GitHub repo中搜索。由于宏定义通常在头文件中找到,因此可以使用高级搜索将搜索限制为“.h”仅扩展文件。对。这是特定于PostgreSQL的,通常与C无关。您是如何在源代码中找到定义的?您是否在本地下载了它?否。不需要在本地下载源代码。您可以在PostgreSQL的官方存储库中搜索源代码,您应该知道如何o在GitHub repo中搜索。由于宏定义通常在头文件中找到,因此可以使用高级搜索将搜索限制为仅搜索“.h”扩展名文件。
    for (i = 0; i < nplans; i++)
    {
        PlanState  *subnode = bitmapplans[i];
        TIDBitmap  *subresult;

        subresult = (TIDBitmap *) MultiExecProcNode(subnode);

        if (!subresult || !IsA(subresult, TIDBitmap))               /*what's IsA(...) ? */
            elog(ERROR, "unrecognized result from subplan");

        if (result == NULL)
            result = subresult; /* first subplan */