为什么 qsort 使用 typedef enum 在 gcc 6.3.0 中导致错误?
Why qsort cause error in gcc 6.3.0 by using typedef enum?
我正在研究强连通分量 (SCC) 算法。
因此,我使用 qsort
函数按升序对顶点进行排序。
为了使用qsort
,我制作了自己的比较函数并使用了typedef enum{false,true} bool
。
VS2017 IDE 编译成功但具有 gcc 6.3.0 的 MinGW 导致如下错误。
我的CreateSorted
和qsort
比较函数就是这些代码。
// qsort compare function, descending order
bool cmp(const void *p1, const void *p2)
{
VF* vf1 = (VF*)p1;
VF* vf2 = (VF*)p2;
return vf2->f - vf1->f;
}
// Create sorted vertices array of VF structure
// For DFS of decreasing finish time vertex
VF* CreateSorted(adjList* adj)
{
VF *sorted_vertices = (VF*)malloc(sizeof(VF)*(adj->vertexNum+1));
for (int i = 1; i <= adj->vertexNum; i++) {
Node* current = adj[i].nodeList;
sorted_vertices[i].v = current->v;
sorted_vertices[i].f = current->f;
}
qsort(sorted_vertices+1, adj->vertexNum, sizeof(VF), cmp);
return sorted_vertices;
}
我真正好奇的是typedef enum{false, true} bool
.
出错的原因
qsort
的第四个参数应该是指向具有以下原型的函数的指针:
int compar (const void* p1, const void* p2)
你的函数原型是:
bool compar (const void* p1, const void* p2)
我正在研究强连通分量 (SCC) 算法。
因此,我使用 qsort
函数按升序对顶点进行排序。
为了使用qsort
,我制作了自己的比较函数并使用了typedef enum{false,true} bool
。
VS2017 IDE 编译成功但具有 gcc 6.3.0 的 MinGW 导致如下错误。
我的CreateSorted
和qsort
比较函数就是这些代码。
// qsort compare function, descending order
bool cmp(const void *p1, const void *p2)
{
VF* vf1 = (VF*)p1;
VF* vf2 = (VF*)p2;
return vf2->f - vf1->f;
}
// Create sorted vertices array of VF structure
// For DFS of decreasing finish time vertex
VF* CreateSorted(adjList* adj)
{
VF *sorted_vertices = (VF*)malloc(sizeof(VF)*(adj->vertexNum+1));
for (int i = 1; i <= adj->vertexNum; i++) {
Node* current = adj[i].nodeList;
sorted_vertices[i].v = current->v;
sorted_vertices[i].f = current->f;
}
qsort(sorted_vertices+1, adj->vertexNum, sizeof(VF), cmp);
return sorted_vertices;
}
我真正好奇的是typedef enum{false, true} bool
.
qsort
的第四个参数应该是指向具有以下原型的函数的指针:
int compar (const void* p1, const void* p2)
你的函数原型是:
bool compar (const void* p1, const void* p2)