Длинные строки с символами новой строки

Я видел код C#, который использует @, чтобы сообщить компилятору, что в строке есть символы новой строки и что все должно быть в одной строке. Есть ли что-то подобное для C / C++?

Например, если я хочу поставить что-то вроде:

73167176531330624919225119674426574742355349194934 96983520312774506326239578318016984801869478851843 85861560789112949495459501737958331952853208805511 12540698747158523863050715693290963295227443043557 66896648950445244523161731856403098711121722383113 62229893423380308135336276614282806444486645238749 30358907296290491560440772390713810515859307960866 70172427121883998797908792274921901699720888093776 65727333001053367881220235421809751254540594752243 52584907711670556013604839586446706324415722155397 53697817977846174064955149290862569321978468622482 83972241375657056057490261407972968652414535100474 82166370484403199890008895243450658541227588666881 16427171479924442928230863465674813919123162824586 17866458359124566529476545682848912883142607690042 24219022671055626321111109370544217506941658960408 07198403850962455444362981230987879927244284909188 84580156166097919133875499200524063689912560717606 05886116467109405077541002256983155200055935729725 71636269561882670428252483600823257530420752963450

В строке я не хочу помещать все это в одну строку, а просто помещаю это так, чтобы компилятор знал, что это только одна строка.

@AntonioCS, над чем вы работаете, используя такие большие числа и такие длинные строки? Вы работаете над каким-то набором тестов для компилятора? Просто любопытно. :-)

Onorio Catenacci 28.10.2008 14:32

Я понимаю, работая над Project Euler.

Skizz 28.10.2008 15:10
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
5
2
16 880
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

На момент написания этого ответа в C и C++ не было ничего похожего на дословные строковые литералы C#. Самое близкое, что вы могли бы сделать, это:

"73167176531330624919225119674426574742355349194934"
"96983520312774506326239578318016984801869478851843" 
"85861560789112949495459501737958331952853208805511"  
"12540698747158523863050715693290963295227443043557" 
"66896648950445244523161731856403098711121722383113" 
"62229893423380308135336276614282806444486645238749" 
"30358907296290491560440772390713810515859307960866" 
"70172427121883998797908792274921901699720888093776" 
"65727333001053367881220235421809751254540594752243"  
"52584907711670556013604839586446706324415722155397" 
"53697817977846174064955149290862569321978468622482" 
"83972241375657056057490261407972968652414535100474" 
"82166370484403199890008895243450658541227588666881" 
"16427171479924442928230863465674813919123162824586"  
"17866458359124566529476545682848912883142607690042"
"24219022671055626321111109370544217506941658960408" 
"07198403850962455444362981230987879927244284909188" 
"84580156166097919133875499200524063689912560717606" 
"05886116467109405077541002256983155200055935729725"     
"71636269561882670428252483600823257530420752963450"

Однако обратите внимание, что даже в C# он не делает того, что вам кажется. Если у тебя есть:

string foo = @"x
y";

в C# строка фактически будет содержать перенос строки.

В C++ 11, согласно комментарию, префикс R обозначает необработанный строковый литерал, например.

string x = R"(First line
second line)";
время летит и хорошие идеи заразительны
Dmitry Ledentsov 23.12.2014 12:51

@DmitryLedentsov: Спасибо, добавил.

Jon Skeet 23.12.2014 12:54

В C и C++ это можно сделать:

const char* str = "73167176531330624919225119674426574742355349194934"
                  "96983520312774506326239578318016984801869478851843";

и компилятор автоматически объединит их в одну строку.

Ответ принят как подходящий

C и C++ имеют автоматическое объединение смежных строк в кавычках. Это означает, что

const char *a = "a" "b";

и

const char *b = "ab";

заставит a и b указывать на идентичные данные. Вы, конечно, можете расширить это, но это становится проблемой, когда строки содержат кавычки. Ваш пример, похоже, не так, поэтому он может быть практичным.

Конечно, вы можете:

char *x = "73167176531330624919225119674426574742355349194934\n"
          "96983520312774506326239578318016984801869478851843\n"
                     <lines removed for brevity>
          "71636269561882670428252483600823257530420752963450";

и это будет точно имитировать поведение @ "" (включая разрывы строк).

Если вы действительно хотите, чтобы это была одна строка без разрывов строк, не вставляйте символы новой строки "\ n", но это немного отличается от того, как @ "" работает в C#.

Проголосовал за этот ответ, поскольку в нем есть \ n для разрывов строк, чего, похоже, хочет OP. (но мне интересно, мог бы он жить без?)

Aardvark 28.10.2008 19:21

Другой вариант - завершить строку символом \, после чего препроцессор удалит следующий символ новой строки:

const char *str = "Hello,\
 World!";

Это не так красиво, как полагаться на автоматическое объединение смежных строковых литералов, как сказано выше; но все равно следует упомянуть.

Другие вопросы по теме