частично оптимизированный вариант
Но ведь позицию подстроки в строке придется определять вручную, тупым подсчетом букв! Или использовать макросы, определяя длину строки с помощью sizeof, только… это же сколько кодить надо!
#define s1 "i say " // левая
половинка
#define s2 "hello, world!\n" // правая
половинка
char s[]=s1 s2; // конструируем всю строку целиком
printf(&s[sizeof(s1)-1]);
// автоматически вычисляем позицию
printf(&s[sizeof(s1)-1]);
// автоматически вычисляем позицию
printf(s);
// выводим всю строку