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;
}