C 使用宏初始化结构

C 使用宏初始化结构,c,macros,struct,C,Macros,Struct,我一直在找,什么也找不到。考虑这个结构 typedef struct student { char name[40]; char grade; }Student; 如何制作用于初始化带有参数的结构的宏?类似于 Student John = STUDENT(John, A); 其中STUDENT是一个定义的宏 #define STUDENT(name, grade) { #name, grade } 然后Student John=Student(John,'A')将扩展为

我一直在找,什么也找不到。考虑这个结构

typedef struct student
{
    char name[40];
    char grade;
}Student;
如何制作用于初始化带有参数的结构的宏?类似于

Student John = STUDENT(John, A); 
其中STUDENT是一个定义的宏

#define STUDENT(name, grade) { #name, grade }
然后
Student John=Student(John,'A')将扩展为

Student John = { "John", 'A' };
#包括
类型定义结构学生
{
字符名[40];
煤焦品位;
}学生;
#定义学生(姓名、年级)(学生){姓名、年级}
int main(){
学生约翰=学生(约翰,A);
printf(“%s,%c\n”,John.name,John.grade);
返回0;
}

为什么要使用宏?你也可以简单地使用一个函数来初始化一个
学生
。因为我被告知这样做很好,但是我觉得这有点奇怪。这很有效,谢谢,但是你能解释一下为什么或者我在哪里可以读到为什么这样做吗?最好是要求代码中有
学生(“John”,“a”)
@dimitrov.l你是说为什么你可以用
={}
初始化结构,或者宏是如何扩展到那一行的?@keltar,我又来了,每当我试图创建第二个“学生”时,我都会出错,你的解决方案是有效的,但只有当我想初始化一个学生时,它才适用于初始化,而不是作业(例如,不是
学生约翰;约翰=学生(约翰,'A');
)。我记得只有在C99或更高版本中才允许结构赋值。
#include <stdio.h>

typedef struct student
{
    char name[40];
    char grade;
}Student;

#define STUDENT(name, grade) (Student){ #name, *#grade }

int main(){
    Student John = STUDENT(John, A); 

    printf("%s, %c\n", John.name, John.grade);
    return 0;
}