Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

Compiler

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Unix
Предыдущая тема :: Следующая тема  
Автор Сообщение
Beginner
Гость





СообщениеДобавлено: Сб Янв 18 2003 16:37    Заголовок сообщения: Compiler Ответить с цитатой

В процессе изучения С поставил ЮНИКС, но при использовании функций стандартной библиотеки, компилятор на строку FILE *fp; сообщает:
'*'syntax error
fp - undeclared identifier ...
То есть FILE как бы не является квалификатором типа. Почему? (строка #include перед этим стоит). Причем, например, функция printf в тех же условиях работает нормально.
Вернуться к началу
Dmitry.Karpov http://prof
Гость





СообщениеДобавлено: Сб Янв 18 2003 20:41    Заголовок сообщения: Приверь предыдущие строчки Ответить с цитатой

Возможно, ты не закрыл какой-то оператор точкой-с-запятой или наоборот, закрыл где не надо. Попробуй убрать звездочку и посмотри на результат. Проверь целостность headers и libraries - может, что-то повреждено (хотя вряд ли).
Сделай copy/paste начала программы сюда или выложи ее на WWW и дай сюда ссылку.
Вернуться к началу
Beginner
Гость





СообщениеДобавлено: Пн Янв 20 2003 15:48    Заголовок сообщения: Вот: Ответить с цитатой

После нескольких экспериментов понял, что ошибку вызывает такой вот код:

#include

int main(int argc, char *argv[])
{
char c;
c = getchar();
FILE *fp;
}
'*'syntax error
fp - undeclared identifier......

Заменив его на:

#include

int main(int argc, char *argv[])
{
char c;
FILE *fp;
c = getchar();
}

получил нормальный результат. Насколько правильно понял - инструкции декларации должны стоять перед всеми остальными инструкциями. Но пара вопросов так и осталась открытыми:
В каких случаях нужно подключать библиотеку явно, т.е. с опцией -l? Как узнать в какой библиотеке хранится нужная мне функция? В каком хэдере она объявлена? Прошу прощения за возможно примитивные вопросы,но Юникс у меня всего пару дней, а времени на его изучение нет.
Вернуться к началу
Dmitry.Karpov http://prof
Гость





СообщениеДобавлено: Пн Янв 20 2003 16:42    Заголовок сообщения: Ну вот, сам догадался! :-) Ответить с цитатой

Вот другой вариант:
#include <stdio.h>
int main(int argc, char *argv[]) {
char c = getchar();
FILE *fp;
}

Насчет библиотек не знаю: надо читать мануалы, а какие - даже не соображу...

В хедерах объявляются не библиотеки, а функции. Т.е. функции одной библиотеки м.б. объявлены в разных хедерах...
Вернуться к началу
Борис
Гость





СообщениеДобавлено: Ср Янв 22 2003 19:10    Заголовок сообщения: Еще вариант: переименуй исходные фйлы из *.c в *.cpp или *.cxx. По другим вопросам внутри (+) Ответить с цитатой

Нормальный результат получился потому, что у тебя расширение .c, а язык C требует сначала все объявить, затем только использовать. А в языке C++ этого ограничения нет: там объявление может быть в любом месте.

>> В каких случаях нужно подключать библиотеку явно, т.е. с опцией -l?
В тех случаях, когда внутри текстов программ нет указания, какие библиотечные файлы использовать, или эти указания невозможно дать, например, если описания (объявления) для разных библиотечных выглядят одинаково, но в зависимости от каких-то условий требуются физически разные файлы. Тогда приходится линковщику через -l сообщать о том, какой конкретно файл использовать. Но это скорее нужно при компиляции для другой платформы, например, компиляция на фри, но для линукс. А для компиляции под свою машину ни к чему.

>>Как узнать в какой библиотеке хранится нужная мне функция? В каком хэдере она объявлена?
Для системых функций (fopen, fread, malloc и т. д.) пишешь man имя_функции и узнаешь все, что нужно, или читаешь этот сайт Smile. Для спецбиблиотек читаешь документацию или тщательно изучаешь исходные тексты этих библиотек Smile. Для своих библиотек держишь в голове Smile, а лучше на бумаге.

PS. Вопросы нормальные, но относятся не к юниксу, а к C/C++
Вернуться к началу
Beginner
Гость





СообщениеДобавлено: Чт Янв 23 2003 16:06    Заголовок сообщения: Re: Еще вариант: переименуй исходные фйлы из *.c в *.cpp или *.cxx. По другим вопросам внутри (+) Ответить с цитатой

Спасибо! Только вот опять вопрос:
>>В тех случаях, когда внутри текстов программ нет указания, какие библиотечные файлы использовать...... А разве в текстах вообще даются указания из каких библиотечных ФАЙЛОВ надо брать функцию?
Вернуться к началу
Beginner
Гость





СообщениеДобавлено: Чт Янв 23 2003 16:32    Заголовок сообщения: Re: Кажется понял! Ответить с цитатой

Кажется понял: компилятор ищет во всех библиотеках /usr/lib... и т.д.?
Вернуться к началу
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Unix Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...