Допустим, у меня есть два статически выделенные глобальные массивы:Создание статически выделяемый массив из двух массивов
const int foo[] = {1, 2, 3};
const int bar[] = {4, 5, 6, 7};
Позже на той же единице компиляции, которые я хотел, чтобы объявить массив, который также статически выделяется и конкатенация foo
и bar
:
const int foo_and_bar[] = ... ?
Возможно или нет?
Конечно, я мог бы сделать что-то уродливое с макросами, как ...
#define FOO_CONTENTS 1, 2, 3
#define BAR_CONTENTS 4, 5, 6, 7
const int foo[] = {FOO_CONTENTS};
const int bar[] = {BAR_CONTENTS};
const int foo_and_bar[] = {FOO_CONTENTS, BAR_CONTENTS};
... но я ищу поддерживаемые идиомы в самом языке C.
«действительно уродливый», что не так с этим элегантным и чрезвычайно простым решением? – Leushenko
Возможно, я мог бы просто сказать «уродливый» - «действительно уродливый» может быть преувеличением! Это уродливо, потому что каждое объявление массива нужно разделить на макрос и декларацию, а не просто выражать «этот массив должен содержать содержимое двух других ранее объявленных переменных». Чтение кода является более жестким, потому что вам нужно расшифровать макрос и найти его в файле и т. Д. Конечно, многие другие сценарии в этих строках (помещая статически выделенные ints в массивы и т. Д.) Не нуждаются в поддержке препроцессора. – BeeOnRope