Приветствую Вас, Рифат! отвечу по мере знаний:)) если у тебя есть программа на си, int main() { ... if (a) return 1; else return 0; } то вот твоя программа возвращает системе либо 0 либо 1, но если твою программу кто-то закрывает снаружи, то передав второй параметр 11, она вернет не 0 и не 1, а 11.
Ответ отправлен: 06.06.2002, 09:47 Отправитель: vitya
Вопрос № 55
vitya, спасибо за подсказку, но она пока мне ничего не дала. дело в чём, тут пишут интерфейсдля внешнего жедлеза на С BUILDER-е, для некоторых команд мы нашли драйвера, а для некоторых пока нет. А управлять из консоли умеют. Так они хотят это сделать через Create и Terminate Process, с первым получается, а вот со вторым пока нет, машина виснет немертво, помогите.
Здравствуйте, Рифат! к сожалению у меня нет опыта работы с этой функцией. Посмотрите в в Рихтере (Jeffry Richter) там это точно будет. У меня здесь нет этой книги, но она есть в интернете, если хорошо поискать. Удачи.
Ответ отправлен: 06.06.2002, 11:27 Отправитель: vitya
Вопрос № 56
Уважаемые эксперты, у меня такой вопрос: где можно почитать о гамотном использовании заголовочных файлов в многофайловых проектах, как правильно использовать #include-директиву (в том смысле, чтобы не объявлялись и не переопределялись по много раз одни и теже переменные)? И еще: подскажите дельную литературу по директивам прекомпиляторов. Заранее благодарен, carbonoid.
Доброе время суток, carbonoid! Делай, как сказал эксперт vitya. А по поводу литературы - читай классику: "Б.Керниган, Д.Ритчи. Язык программирования Си. Издание второе, переработанное и дополненное". Глава 4.11 - Си-препроцессор. А в параграфе 4.11.3 описано, как застраховаться от повторного включения заголовочного файла. Ответ отправлен: 06.06.2002, 13:23 Отправитель: Артём Шегеда Отвечает Morgion
Добрый день, carbonoid! Если меется в виду вложенные include (то есть файл my1.h инклюдит m3.h и m2.h, который инклюдит m3.h :)), то тогда просто надо сделать следующее //////////////My.h//////////////// #ifndef _____MY_H_ #define _____MY_H_ //собственно тело заголовочного файла // #endif //////////////end My.h//////////// #define- определение макроопределения :), то есть просто строки ____MY_H_(или любой другой, но уникальной), которая будет использоваться только для идентификации заголовочного файла. При прекомпиляции эта последовательность будет удалена, точнее заменена ничем. (Если бы было написано #define ____MY_H_ 1, то тогда ___MY_H_ заменялось бы на 1) #ifndef ____MY_H_- проверка условия- была ли ранее определена ____MY_H_ и если нет, то компилить (прекомпилить) всё, что до соответствующего #endif (по уровню вложенности) Если
интересует работа с #define, то вот тебе примерчик: #include #define square(t) (t*t) void main() { int x,y,z; x=10; //..... printf("x=%d
",x); y=square(x++);// Как ты думаешь- чему равняеться y, // учитывая то, что square - это макро а не функция??? printf("y=suqare(x++) is %d x=%d
",y,x); x=10; printf("x=%d
",x); y=square(++x); printf("y=suqare(++x) is %d x=%d
",y,x); z=square(x+1); printf("z=square(x+1) is %d x=%d
",z,x); // а после этого z=25 %)%)%) // потому что вместо square(x+1) подставляеться (x+1*x+1) // в общем- не рекомендуеться использовать при //использованиив макро всяких //пре/пост-инкрементов/декрементов. И данное макро //следовало бы переписать как // #define square(t) ((t)*(t)), // тогда выражения типа square(x+1) будут правильно // (точнее так как этого ожидаешь ты) прекомпилированно //..... } Ответ отправлен: 06.06.2002, 13:44 Отправитель: Morgion Отвечает vitya
Добрый день, carbonoid! В начале каждого h файла, пиши следующий код #ifndef ___THIS_H_FILE_INCLUDED #define ___THIS_H_FILE_INCLUDED .... код h файла .... #endif THIS_H заменай на конкретно твой файл.
Ответ отправлен: 06.06.2002, 12:18 Отправитель: vitya Отвечает kvINT
Приветствую Вас, carbonoid! О использовании - книга Дейтелов "Как программировать на С". Если обрамлять заголовочные файлы директивами препроцессора, о повторных включениях беспокоиться не надо. Пр: #ifndef <имя> #define <имя> include ... ........... include ... определения классов и др. #endif В качестве <имени> ставится любое уникальное имя, обычно имя заголовочного файла в таком виде: файл - qwerty.h, значит имя обзывают QWERTY_H. В этом случае при использовании этого хэдера где-либо при помощи include он будет включен только в 1-й раз. Все стандартные библиотечные хэдеры обычно тоже обрамлены этими директивами, так что включаются тоже лишь один раз. Ответ отправлен: 06.06.2002, 21:46 Отправитель: kvINT Отвечает Zloy
Здравствуйте, carbonoid! Ну, например вот так: #ifndef _MY_FILE_ #define _MY_FILE_ здесь то, что надо #endif При этом, если подключить этот файл 2 раза подряд, то "то, что надо" читаться не будет.
Приложение: Ответ отправлен: 06.06.2002, 22:21 Отправитель: Zloy Отвечает LAO
Добрый день, carbonoid! Даю в приложении стандартную структуру заголовочных файлов
Приложение: Ответ отправлен: 06.06.2002, 17:19 Отправитель: LAO Отвечает DiGiT
Здравствуйте, carbonoid! #ifdef something__ #define something__ открой любой заголовочный файл и посмотри #endif Ответ отправлен: 07.06.2002, 10:33 Отправитель: DiGiT Отвечает Александр
Здравствуйте, carbonoid! Про использование заголовочных файлов в больших проектах могу сказать только одно. Во всех книжках для того, чтобы определения не повторялись пользуются конструкцией типа #ifndef __SVGA__ #define __SVGA__ ...... #elseif ...... #endif
Ответ отправлен: 07.06.2002, 14:13 Отправитель: Александр
Форма отправки вопроса
Внимание!
Форма может работать некорректно в почтовых программах "Microsoft Outlook"
и "Microsoft Outlook Express". В программе The Bat!
подобные формы не работают вообще!
После нажатия на кнопку "Отправить", будет открыто второе окно. Заметьте,
что в некоторых браузерах могут стоять запреты на открытие других
окон, а также "чрезмерное" кэширование данных,
при этом факт отправки Вашего вопроса стоит под сомнением.
Мы рекомендуем открывать рассылку в программе Internet
Explorer 5.0+ или отправлять вопросы с сайта по адресу:
http://rusfaq.ru/cgi-bin/Message.cgi.