如何避免同名函数和宏定义冲突?

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

我定义了一个像这样的函数和宏来设置矩阵内部的值:

void init_matrix(Matrix *mat, double ea[],  size_t size)
{
    for (int i = 0; i < mat->row; i++)
        for (int j = 0; j < mat->col; j++) {
            if (!(i*mat->col+j<size))
                return;
            mat->entries[i][j] = ea[i*mat->col + j];    
        }
}

#define init_matrix(mat, ...) init_matrix(mat, (double []) {__VA_ARGS__}, sizeof((double []) {__VA_ARGS__})/sizeof(double))

现在工作正常,但我正在考虑将函数声明和宏移到头文件中,然后将该头文件包含到该程序中。但是当我这样做时,它可能会将函数的定义扩展为如下所示:

void init_matrix(Matrix *mat, (double []) {double ea[], size_t size}, sizeof((double []) {double ea[], size_t size})/sizeof(double))

这会让一切变得混乱,对吧?我怎样才能避免这种情况? 也许将此函数放在文件末尾并在其之前使用 #undef init_matrix ?或者有没有一种方法可以在代码的一部分中取消定义宏并使其像该部分之前和之后一样工作?

c c-preprocessor
1个回答
0
投票

在你的函数两边加上括号:

void (init_matrix)(Matrix *mat, (double []) {double ea[], size_t size}, sizeof((double []) {double ea[], size_t size})/sizeof(double))

你就完成了。

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