Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на C / C++


Информационный Канал Subscribe.Ru


RusFAQ.ru: Программирование на C / C++

Выпуск № 018
от 10.06.2002, 08:20

Администратор:
Имя: Коробов Н.А.
URL: Информационный ресурс
ICQ: 365124
Украина, Днепропетровск
О рассылке:
Задано вопросов: 61
Отправлено ответов: 107
Активность: 175.4 %
[Задать вопрос >>][Регистрация эксперта >>]
[Поиск в базе]


 Список экспертов, ответы которых опубликованы в данном выпуске

vitya
Статус: Опытный
Общий рейтинг: 118.02
[Подробней >>]
Артём Шегеда
Статус: Профессиональный
Общий рейтинг: 130.1
URL: Пристанище неодинокого программиста
[Подробней >>]
Morgion
Статус: Начальный
Общий рейтинг: 125
[Подробней >>]
 
kvINT
Статус: Доверительный
Общий рейтинг: 110.24
[Подробней >>]
Zloy
Статус: Доверительный
Общий рейтинг: 105.07
[Подробней >>]
LAO
Статус: Опытный
Общий рейтинг: 118.5
[Подробней >>]
 
DiGiT
Статус: Профессиональный
Общий рейтинг: 144.76
[Подробней >>]
Александр
Статус: Опытный
Общий рейтинг: 119.62
[Подробней >>]


 Краткий перечень вопросов

Вопрос № 54. Спасибо за ответ vitya. А по подробнее про второй параметр, если можно, пожалуйста.... (ответов: 1)
Вопрос № 55. vitya, спасибо за подсказку, но она пока мне ничего не дала. дело в чём, тут пишут интерфейсдля внеш... (ответов: 1)
Вопрос № 56. Уважаемые эксперты, у меня такой вопрос: где можно почитать о гамотном использовании заголовочных фа... (ответов: 8)

Вопросов: 3, ответов: 10


 Вопрос № 54

Спасибо за ответ vitya.
А по подробнее про второй параметр, если можно, пожалуйста.



Вопрос отправлен: 06.06.2002, 09:38
Отправитель: Рифат

[Следующий вопрос >>] [Список вопросов]

Отвечает vitya

Приветствую Вас, Рифат!
отвечу по мере знаний:))
если у тебя есть программа на си,
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, с первым получается, а вот со вторым пока нет, машина виснет немертво, помогите.



Вопрос отправлен: 06.06.2002, 10:16
Отправитель: Рифат

[Следующий вопрос >>] [Список вопросов]

Отвечает vitya

Здравствуйте, Рифат!
к сожалению у меня нет опыта работы с этой функцией. Посмотрите в в Рихтере (Jeffry Richter) там это точно будет. У меня здесь нет этой книги, но она есть в интернете, если хорошо поискать. Удачи.


Ответ отправлен: 06.06.2002, 11:27
Отправитель: vitya


 Вопрос № 56

Уважаемые эксперты, у меня такой вопрос:
где можно почитать о гамотном использовании заголовочных файлов в многофайловых проектах, как правильно использовать
#include-директиву (в том смысле, чтобы не объявлялись и не переопределялись по много раз одни и теже переменные)?
И еще: подскажите дельную литературу по директивам прекомпиляторов.
Заранее благодарен, carbonoid.



Вопрос отправлен: 06.06.2002, 12:07
Отправитель: carbonoid (carbonoid@mail.ru)

[Следующий вопрос >>] [Список вопросов]

Отвечает Артём Шегеда

Доброе время суток, 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.

© 2002 Команда RusFAQ.ru.

 Персональные данные

Ваше имя:

Ваш e-mail:

Опубликовать мой e-mail в рассылке


 Вопрос и дополнение

Ваш вопрос:


Приложение (если необходимо):


Получить ответов:


 Выбор рассылки

Программисту
Assembler (49)
C / C++ (30)
Perl (10)
Delphi (17)
Pascal (27)
Basic / VBA (16)
Java / JavaScript (7)
PHP (8)
MySQL / MSSQL (7)
Пользователю
Windows 95/98/Me (48)
Windows NT/2000/XP (35)
"Железо" (40)
Поиск информации (21)
Администратору
Windows NT/2000/XP (16)
Linux / Unix (10)
Юристу
Гражданское право (10)
Семейное право (4)
Трудовое право (6)
КоАП (3)

Отправить вопрос всем экспертам выбранной рассылки.




be number one Яндекс цитирования

© 2002 Россия, Москва. Авторское право: RusFAQ.ru

http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное