Как открыть вложенную структуру без столкновения имен в C-программировании?

0

Мне нравится открывать структуру и использовать имена участников прямо следующим образом:

typedef struct{
    int n;
    int m;
    int *A;
    int *B;
    type1 *slave;
} type2;

#define n this->n
#define m this->m
#define A this->A
#define B this->B

void routine2(type2 *this){
    n = slave->n;
    m = n + 1;
    A = (int *)malloc(n * sizeof(int));
}

В большинстве случаев он отлично работает, и мой код легко читается. Однако приведенный выше код не может компилироваться, поскольку slave->n будет расширен препроцессором до slave->this->n. Я ищу предложения о том, как преодолеть эту трудность. По моему мнению, C++ позволяет сделать это, если указанная выше структура является классом, а routine2() является функцией-членом. Как я могу достичь того же самого в C?

  • 0
    Не используйте this как имя для переменной. this зарезервированное ключевое слово в c ++. Я бы использовал умный указатель для A и free качестве пользовательского удалителя ( A = std::shared_ptr<int>(malloc(n * sizeof(int)), free); )
Теги:
naming-conventions
c-preprocessor

2 ответа

2

Выбери один:

  • Не делай этого. Это злоупотребление макросистемой C, и стиль достаточно необычен, что вы будете отчуждать кого-либо еще, пытаясь понять ваш код.

  • Используйте C++. Если вы обнаружите, что синтаксический сахар, предоставленный C++, например, членский доступ, является убедительным, тогда просто напишите свой код в C++.

0
  1. Это очень, очень опасная идея делать такие вещи. Это почти гарантированно приведет к затруднению поиска ошибок.
  2. Если вы настаиваете, один очевидный способ - ввести уникальные имена, например, например, struct tm - все начинается с префикса tm_. Или введите, например, макросы CAPITAL_LETTER для имен capital_letter. Но это, вероятно, не то, что вы хотите.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню