При включении библиотек c строка не заканчивается точкой с запятой, в то время как другие утверждения выполняются. В чем причина этого?Почему строки не заканчиваются точкой с запятой?
ответ
По той же причине #define макросов нет - они предназначены для препроцессора, который расширяет такие вещи, как include и определяет, прежде чем сам компилятор возьмет верх.
строки, начинающиеся с #, не являются частью языка C, это инструкции для предварительного процессора. Когда он был впервые разработан, полуколоны просто не требовались.
#include
является командой предварительной обработки, такой как #define
. #include
сообщает компилятору включить указанный файл в исходный код, прежде чем ваш код будет скомпилирован.
Я исправил форматирование для вас; когда вы вводите ответ, вы можете посмотреть предварительный просмотр под текстовым полем, чтобы посмотреть, как он будет выглядеть. # является символом форматирования, поэтому вам необходимо каким-то образом защитить его. –
Спасибо за помощь. – sdp07
«... в то время как другие заявления делают».
Во-первых, препроцессорные директивы не являются заявлениями. Ведомость - это сущность, существующая только на синтаксическом/семантическом уровне. Директивы препроцессора обрабатываются на относительно ранних этапах перевода, прежде чем начнется какой-либо синтаксический анализ, поэтому на этом этапе еще нет такой вещи, как «заявление». И по этой причине нет никакого содержательного обоснования, чтобы требовать прекращения директивы #include
с точкой с запятой. Если факт, директивы препроцессора по определению занимают всю строку, что означает, что они уже оканчиваются символом новой строки. Любой дополнительный ограничитель будет лишним.
Во-вторых, не все «другие заявления» заканчиваются точкой с запятой. Составной оператор, например, не является
i = 5;
{ /* <- compound statement begins here... */
i = 10;
} /* <- ... and ends here. Note: no semicolon */
i = 15;
- 1. Получить строки, которые не заканчиваются точкой с запятой из файла
- 2. Чтение файла и проверка того, заканчиваются ли строки с запятой
- 3. найти резюме, которые не заканчиваются точкой
- 4. String.split точкой с запятой
- 5. Почему доказательство с точкой с запятой не работает с периодами?
- 6. SAXException точкой с запятой
- 7. CSV с запятой или точкой с запятой?
- 8. Почему некоторые строки не имеют точки с запятой в C#?
- 9. Объявление протокола заканчивается точкой с запятой?
- 10. Почему расширенный цикл не заканчивается, когда заканчивается точкой с запятой?
- 11. Завершить цикл с точкой с запятой
- 12. PHP заканчивается точкой с запятой
- 13. Wordpress dbdelta точкой с запятой
- 14. Совпадение, разделенных точкой с запятой
- 15. разделение запятой, пробелом или точкой с запятой с использованием regex
- 16. указание строки с точкой с запятой в UrlScan.ini
- 17. Переупорядочить содержимое строки, помеченное точкой с запятой, с помощью Regex?
- 18. Почему цикл for с точкой с запятой после его выполнения?
- 19. Как сделать запятую запятой, а не точкой?
- 20. Почему строки заканчиваются на экспортированные SoapUI TestSuites?
- 21. свернуть строки, сохранить уникальность, удалить дубликаты, разделить точкой с запятой
- 22. Resharper добавлять новые строки перед точкой с запятой
- 23. Как сгенерировать dict из строки, разделенной точкой с запятой?
- 24. Почему строки заканчиваются нулевым символом в java?
- 25. Почему плохо помещать пробел перед точкой с запятой?
- 26. Почему str_replace заменяет мой символ точкой с запятой?
- 27. Lua split string точкой с запятой
- 28. Преобразование строки, разделенной точкой с запятой, в JSON в PHP
- 29. Захват всех цифр перед точкой с запятой
- 30. C# - Заменить новую строку точкой с запятой
Немного больше определения - предварительный процессор работает до того, как компилятор запускается, и он заменяет текст. Оператор #include заменяется содержимым ссылочного файла. Параметр #define вводится в таблицу поиска, а затем, когда определение отображается в коде, оно заменяется сохраненным значением и т. Д. И т. Д. На самом деле вы можете использовать другой препроцессор вместо стандартного, но мало люди делают это в реальном мире. –
это не препроцессор, который делает фанк-линию продолжения таких вещей, как \ и конкатенирование сломанных строковых литералов? – JustJeff
@JustJeff: см. Http://stackoverflow.com/questions/1476892/poster-with-the-8-phases-of-translation-in-the-c-language; конкатенация строковых литералов выполняется в фазе перевода 6 между предварительной обработкой (этап 4) и семантическим анализом/компиляцией (этап 7), поэтому вы можете делать это как в препроцессоре, так и в компиляторе; присоединение линий вдоль задней обратной косой черты происходит на этапе 2 до того, как препроцессор правильно работает – Christoph