c# 如何在C中打印函数中的变量名[重复]

y0u0uwnf  于 2023-05-15  发布在  C#
关注(0)|答案(1)|浏览(174)

此问题已在此处有答案

get the variable name passed to a function in C(4个答案)
3小时前关闭
我想打印一个二维矩阵的名称,我在一个函数中作为输入。
我试着用我在网上找到的这个:

#include <stdio.h> 
#define VariableName(var) #var   

void saddle(int a[][100], int m, int n)
{
    printf("The saddle points of the matrix %s are: \n", VariableName(a));
}
 `

但是在每个函数调用中,我得到的名称是a,而不是输入的矩阵I,例如。ABC。如何度过这一关?

wlsrxk51

wlsrxk511#

VariableName(var)总是在代码中生成字符串"a"。矩阵的名称只有在调用站点才知道,所以你应该把它作为一个额外的参数传递,你可以在那里使用相同的宏来创建字符串:

#include <stdio.h> 

#define VariableName(var) #var   

void saddle(int a[][100], int m, int n, const char *name)
{
    printf("The saddle points of the matrix %s are:\n", name);
}

int main(void)
{
    int matrix[100][100];
    saddle(matrix, 100, 100, VariableName(matrix));
    return 0;
}

使用"matrix"而不是VariableName(matrix)似乎更简单,但这里有一个更高级的版本,其中隐式传递矩阵名称或表达式:

#include <stdio.h> 

#define VariableName(var) #var   

#define saddle(a,m,n)  (saddle)(a, m, n, VariableName(a))
#define print_matrix(a,m,n)  (print_matrix)(a, m, n, VariableName(a))

void (saddle)(int a[][100], int m, int n, const char *name)
{
    printf("The saddle points of the matrix %s are:\n", name);
}

void (print_matrix)(int a[][100], int m, int n, const char *name)
{
    printf("Contents of matrix %s:\n", name);
    for (int i = 0; i < m; i++) {
        for (int j = 0; j < n; i++)
            printf(" %3d", a[i][j]);
        printf("\n");
    }
}

int main(void)
{
    int matrix1[10][100] = { 0 };
    int matrix2[10][100] = { 0 };
    saddle(matrix1, 10, 10);
    saddle(matrix2, 10, 10);
    print_matrix(matrix1, 10, 10);
    print_matrix(matrix2, 10, 10);
    return 0;
}

相关问题