2014-07-24 3 views
3

Я искал и ничего не нашел. Рассмотрите эту структуруИнициализация структуры с помощью макроса

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

Как создать макрос для инициализации структуры с параметрами? Что-то вдоль линий

Student John = STUDENT(John, A); 

где студент определенного макроса

+3

Зачем использовать макрос? Вы также можете просто использовать функцию для инициализации «Студент». – Codor

+0

Потому что мне сказали сделать это таким образом –

+0

Хорошо, но я нахожу это немного удивительным. – Codor

ответ

6
#define STUDENT(name, grade) { #name, grade } 

Тогда Student John = STUDENT(John, 'A'); будет расширено в

Student John = { "John", 'A' }; 
+0

Это работает, спасибо, но можете ли вы объяснить, почему или где я могу прочитать, почему это работает? –

+2

Было бы лучше, если бы код требовал, чтобы код имел «СТУДЕНТ (« Джон »,« А »)' –

+0

@ dimitrov.l. Вы имеете в виду, почему вы можете инициализировать структуру с помощью '= {}' или как макрос расширяется до этого линия? – keltar

0
#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; 
} 
Смежные вопросы