Я столкнулся с той же проблемой, когда устанавливаю Python, и разрешается, когда я устанавливаю PATH в системе, вот шаги.
Он определен стандартом ISO C, смежные строковые литералы объединяются в один.
Язык немного сух (это стандарт в конце концов), но раздел 6.4.5 String literals
состояний C11 :
В фазе 6 перевода многосимвольные последовательности символов, заданные любой последовательностью смежных символов и тождественно-префиксов с широким строковым литералом, объединены в одну многобайтовую последовательность символов.
blockquote>Это также упоминается в
5.1.1.2 Translation phases, point 6
, немного более лаконично:Связанные жетоны литералов строки сцепляются.
blockquote>Это в основном означает что
"abc" "def"
ничем не отличается от"abcdef"
.Это часто полезно для создания длинных строк при хорошем форматировании:
char *myString = "This is a really long " "string and I don't want " "to make my lines in the " "editor too long, because " "I'm basically anal retentive :-)";
Вы ответили на свой вопрос.
Если я даю пробел или ничего между двумя строковыми литералами, он конкатенирует строковые литералы.
blockquote>Это один особенностей синтаксиса C.
И чтобы ответить на ваш вопрос, который не задан, «Для чего это полезно?»
С одной стороны, вы можете поместить константы в строковые литералы. Вы можете написать
#define FIRST "John"
#define LAST "Doe"
const char* name = FIRST " " LAST;
const char* salutation = "Dear " FIRST ",";
, а затем, если вам нужно будет изменить имя позже, вам нужно будет только изменить его в одном месте. Такие вещи.
Стандарт ISO C §5.1.1.2
говорит: -
blockquote>
- Связанные жетоны литералов строки объединены.
- Символы пробела, разделяющие токены, уже не являются значимыми.