Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Директива #include  (Прочитано 6361 раз)
0 Пользователей и 1 Гость смотрят эту тему.
LemmonRus
Помогающий

ru
Offline Offline
В правильно заданном вопросе 90% ответа.


« : 23-06-2011 09:37 » 

Вопрос такой как должен отреагировать компилятор при компиляции при нахождении в файле "*.c" такой строчки
#include "*.c".
« Последнее редактирование: 23-06-2011 09:38 от LemmonRus » Записан
Вад
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 23-06-2011 09:56 » 

Зависит от реализации, но, вообще, в файловых системах, где * не является допустимым именем для файла, препроцессор, скорее всего, должен выдать ошибку. Поскольку #include нужен, всё-таки, для включения конкретного файла с конкретным именем, а не поиска чего-либо подходящего по маске.

Или ты имеешь в виду, что в файле foo.c идёт конструкция #include "foo.c"? Тоже зависит от реализации, но, скорее всего, будет попытка рекурсивно включить файл и посыплются ошибки повторного определения функций, в этом файле содержащихся.
« Последнее редактирование: 23-06-2011 09:59 от Вад » Записан
LemmonRus
Помогающий

ru
Offline Offline
В правильно заданном вопросе 90% ответа.


« Ответ #2 : 23-06-2011 10:04 » 

Зависит от реализации, но, вообще, в файловых системах, где * не является допустимым именем для файла, препроцессор, скорее всего, должен выдать ошибку. Поскольку #include нужен, всё-таки, для включения конкретного файла с конкретным именем, а не поиска чего-либо подходящего по маске.
Моя ошибка ,там 2 разных файла т.е. в a.c подключается b.c.
Или ты имеешь в виду, что в файле foo.c идёт конструкция #include "foo.c"? Тоже зависит от реализации, но, скорее всего, будет попытка рекурсивно включить файл и посыплются ошибки повторного определения функций, в этом файле содержащихся.
А насчет рекурсии ,спасибо за мысль буду проверять.
Записан
Вад
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 23-06-2011 10:10 » 

Если два разных файла, тут ещё такое может быть: допустим, у тебя компилируются a.c и b.c, при этом в a.c есть #include b.c.
В этом случае слинковать два получившихся объектных файла в одно целое не получится: будет ругаться на duplicated references или что-то такое, потому что в a.c препроцессор уже включил всё то же самое, что есть в b.c, и "a.o" будет включать в себя содержимое "b.o" как подмножество. Другое дело, что в такой ситуации линковать их и не надо: b.o просто избыточен и не нужен.
« Последнее редактирование: 23-06-2011 10:12 от Вад » Записан
LemmonRus
Помогающий

ru
Offline Offline
В правильно заданном вопросе 90% ответа.


« Ответ #4 : 23-06-2011 12:28 » 

Если два разных файла, тут ещё такое может быть: допустим, у тебя компилируются a.c и b.c, при этом в a.c есть #include b.c.
В этом случае слинковать два получившихся объектных файла в одно целое не получится: будет ругаться на duplicated references или что-то такое, потому что в a.c препроцессор уже включил всё то же самое, что есть в b.c, и "a.o" будет включать в себя содержимое "b.o" как подмножество. Другое дело, что в такой ситуации линковать их и не надо: b.o просто избыточен и не нужен.
Именно в этом дело и оказалось. Огромное спасибо.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines