Мне нравится открывать структуру и использовать имена участников прямо следующим образом:
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?
Выбери один:
Не делай этого. Это злоупотребление макросистемой C, и стиль достаточно необычен, что вы будете отчуждать кого-либо еще, пытаясь понять ваш код.
Используйте C++. Если вы обнаружите, что синтаксический сахар, предоставленный C++, например, членский доступ, является убедительным, тогда просто напишите свой код в C++.
this
как имя для переменной.this
зарезервированное ключевое слово в c ++. Я бы использовал умный указатель для A иfree
качестве пользовательского удалителя (A = std::shared_ptr<int>(malloc(n * sizeof(int)), free);
)