Нет ли способа объединить две строки в один оператор?

Нравиться

pri
ntf("hi");

Я могу использовать макрос \ in, но я думаю, что здесь это не работает: '(

#
Источник
  • 5
    Есть ли причина, по которой вы когда-нибудь захотите это сделать?
  • 0
    любой вид пробелов равен компилятору: foo () , foo<TAB>() , foo<ENTER>() эквивалентны
  • 0
    Спасибо, нет особых причин извиняться за опечатку
  • 0
    ОТ: Вы знаете, что существует множество «законных» положений, в которых строку можно разбить на несколько строк.
  • 1
    Какую проблему вы пытаетесь решить? Использование \ для продолжения кода C через разделение строк было создано таким образом, чтобы C можно было набирать на перфокартах (карты Холлерита) или в форматах, имитирующих их, например в файлах с форматами фиксированной длины записи. Вы используете клавиатуру для ввода кода C? Затем используйте \, чтобы продолжить исходный код. В противном случае не делайте этого. Если вы пытаетесь достичь чего-то еще, объясните свою цель и почему вы думаете, что объединение строк может помочь, чтобы люди могли предложить подходящие решения.
  • 0
    @EricPostpischil Я хотел сделать, потому что иногда имя функции слишком длинное. Для этого нет особой цели. Спасибо!
Codelisting
за 8 против
Лучший ответ

Вы можете использовать\

pri\
ntf("hi");

Демо

Из проекта N1570 стандарта C, раздел 5.1.1.2 Фазы перевода:

Each instance of a backslash character ( \ ) immediately followed by a new-line character is deleted, splicing physical source lines to form logical source lines.

  • 0
    Обратите внимание, что это решение не позволяет иметь отступ в следующей строке. См. Мое решение, которое допускает отступы.
  • 0
    @AndreasWenzel ваш не будет работать для шаблонов, принимающих несколько аргументов шаблона.
  • 1
    Я считаю, что OP хочет разделить какое-то длинное имя, чтобы оно соответствовало строке. В любом случае это не то, что вы обычно делаете
  • 0
    Вопрос помечен как «c», а не «c ++». В C нет шаблонов.
  • 0
    @AndreasWenzel Вы правы. Я совершенно скучал по этому поводу: D
за 4 против

Это похоже на проблему XY .

С использованием\ будет работать, но вам не разрешено делать отступы в следующей строке. Если вы хотите иметь отступ, вы можете сделать это следующим образом:

#include <stdio.h>

#define CONCATENATE(left,right) left##right

int main(void)
{
    CONCATENATE(
        pri,
        ntf("hi\n");
    )
}
  • 0
    Но ... как мне разделить CONCATENATE ?
  • 1
    @ 4386427: Вы также хотите разделить имя макроса CONCATENATE две строки? Если это имя слишком длинное, вы можете сделать его короче. Вы можете дать ему любое имя.
  • 0
    @ 4386427: Если вы хотите разделить фактическое определение макроса на несколько строк, вам нужно будет использовать `\` внутри определения макроса.
Codelisting
Популярные категории
На заметку программисту