编译时参数化类型定义

问题描述 投票:0回答:1

我正在尝试用 C 实现图数据结构。

我有一个

.h
文件,其中包含以下声明:

// Graph.h

#define _GRAPH_H

typedef struct
{
    unsigned short isExists : 1;
    WEIGHT_TYPE weight;
} Weight;

typedef struct
{
    Weight adjacencyMatrix[VERTICES_NUM][VERTICES_NUM];
    VERTEX_TYPE vertices[VERTICES_NUM];
} Graph;

我希望能够声明一个

Init
函数(在
.c
文件中),它将
VERTICES_NUM
作为参数(这样我就能够声明向量,而无需为 的所有用法定义恒定数量的顶点)图表)。

我知道我可以在包含

.h
文件之前定义这些常量,但我正在寻找更好的解决方案。

注意:我试图避免在这里使用任何动态分配。

编辑:

我想到了这个用法:

#include "Graph.h"

void main()
{
    Graph g;
    Init(&g, 10, char); // 10 vertices and vertex type is char
}
c matrix graph-theory adjacency-matrix static-memory-allocation
1个回答
0
投票

我知道我可以在包含 .h 文件之前定义这些常量,但是 我正在寻找更好的解决方案。

通常使用两种方法。

  1. 使用常见定义(例如您的尺寸)创建

    .h
    文件,并在需要时包含此文件。

  2. 使用编译器命令行选项。 gcc 有

    -D
    选项 ('-DVERTICES_NUM=10`)

© www.soinside.com 2019 - 2024. All rights reserved.