У меня есть файл данных, который я хочу загрузить во время предварительной обработки.
DATAFILE :
CAR(C1, C2, C3)
Всего может быть n автомобилей (C1, C2 .... Cn), в настоящее время 3. C1, .. - это поля перечислений с определенным значением, например, C1 = 5, C2-8, c3-10.
Я хочу заполнить эти данные в автомобильном массиве CAR_SUPPORTED[MAX_CARS] таким образом, чтобы
CAR_SUPPORTED[C1] = 1 and similarly for C2,C3.. so on.
Я пробовал вариативный макрос как:
int CAR_SUPPORTED[] = {
#define CAR(...) __VA_ARGS__};
#include "car.data"
Но это может просто скопировать индексы 5, 8, 10 в 0,1,2.
как мне написать такой макрос, чтобы CAR_SUPPORTED [C1] = 1 и так далее. Какие-либо предложения ?
почему этот вопрос задан -1? разве это не требует правильной логики программирования?





Просто используйте инициализацию массива с указателем:
#define CAR(C1, C2, C3) [C1] = 1, [C2] = 1, [C3] = 1 };
Если вы хотите использовать это для переменного числа аргументов, я буду использовать P99 или макросы препроцессора boost, или вы можете написать расширение макроса самостоятельно. Пример использования ускорения:
#include <boost/preprocessor.hpp>
#define CAR_ONE(r, data, elem) [elem] = 1,
#define CAR(...) BOOST_PP_SEQ_FOR_EACH(CAR_ONE,,BOOST_PP_VARIADIC_TO_SEQ(__VA_ARGS__)) };
CAR(A1, A2, A3)
Я попытался найти реализацию в boost, это паутина Маркоса. Вид потерялся :(
Это те же самые примеры здесь, но больше и больше. Не нужно это понимать. А P99 попроще.
int CAR_SUPPORTED[MAX_CARS] = {==>int CAR_SUPPORTED[] = {т.е. позволяет компилятору подсчитывать количество элементов.