Ваша реализация DD
неплохая идея, хотя она страдает от некоторого плохого синтаксиса и неопределенного поведения.
const char *DDD(void)
{
static char arr[] = HEADING_TITLE_PROJECT_NAME;
if(arr[2] == ' ')
for(size_t i = 2; i + 3 < sizeof arr; i++)
arr[i] = '=';
return arr;
}
#define DD DDD()
Вы не можете вернуть указатель на данные стека, поэтому вы должны использовать массив static
. Мы можем убедиться, что это правильный размер, автоматически установив строку #define
d, а затем проверив, заполнен ли он еще '='
и, если нет, заполните его. Затем мы возвращаем const
указатель на него, чтобы никто не пытался его изменить.
Ваш макрос определяет функцию get
с неопределенными аргументами и возвращающую модифицируемую char *
для суммирования данных. К сожалению, эта функция будет определяться везде, где вы используете макрос, что приведет к множественным ошибкам определения.
Вы не можете использовать это с конкатенацией необработанных строк, но это будет работать для всего, что вы хотите.