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

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


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


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

Выпуск № 394
от 01.11.2003, 10:10

Администратор:
Имя: Nick.Box
URL: Информационный ресурс
ICQ: 365124
[censored], [censored]
О рассылке:
Задано вопросов: 1206
Отправлено ответов: 2737
Активность: 226.9 %
[Задать вопрос >>][Регистрация эксперта >>]
[Поиск в базе][Обсудить на форуме]


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

Александр
Статус: Начальный
Общий рейтинг: 101.06
[Подробней >>]
Avl2k
Статус: Профессиональный
Общий рейтинг: 124.24
[Подробней >>]
Morgion
Статус: Доверительный
Общий рейтинг: 107.93
[Подробней >>]
 
vitya
Статус: Профессиональный
Общий рейтинг: 108.04
[Подробней >>]
BOLT
Статус: Профессиональный
Общий рейтинг: 170.57
URL: Начинающему программитсу: софт, примеры, документация, Assembler, C & C++.
Телефон: Три раза АУ!
[Подробней >>]
Andrew Vext
Статус: Профессиональный
Общий рейтинг: 104.16
[Подробней >>]
 
Yuri Gordienko
Статус: Профессиональный
Общий рейтинг: 119.68
URL: Досконально о С++, оптимизация программ, советы
[Подробней >>]
chebv
Статус: Начальный
Общий рейтинг: 116.94
[Подробней >>]


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

Вопрос № 1197. Здравствуйте. 1) Чем отличаются следующие обявления функций? 2) Чем отличается inline ф-ия от обычно... (ответов: 8)
Вопрос № 1198. люди, помогите!!!!надо сдавать уже прогу, а я не могу даже приступить...объясните мне пожалуйста: да... (ответов: 1)

Вопросов: 2, ответов: 9


 Вопрос № 1197

Здравствуйте.
1) Чем отличаются следующие обявления функций?
2) Чем отличается inline ф-ия от обычной (на уровне памяти)?


Приложение:


Вопрос отправлен: 28.10.2003, 12:13
Отправитель: Charodey

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

Отвечает Александр

Доброе время суток, Charodey!
inline-функция подобна макроподстановке, и соответственно
экономит память.


Ответ отправлен: 28.10.2003, 15:26
Отправитель: Александр


Отвечает Avl2k

Добрый день, Charodey!
1. Ничем. Второе объявление считается устаревшим.
2. inline - это указание компилятору, что хорошо бы вставить код данной функции по месту, а не вызывать ее с помощью call. Правда, компилятор может все равно поступить по-своему :) Использование inline-функций может существенно ускорять выполнение программы, правда, при этом увеличивается и ее объем. Раскрытие inline-функций должно быть разрешено соответствующей опцией компилятора.
С уважением, Avl2k.

Ответ отправлен: 28.10.2003, 13:13
Отправитель: Avl2k


Отвечает Morgion

Доброе время суток, Charodey!
1) Первое объявление- нормальное объявление по стандарту C++ или новому стандарту C;
Второе объявление- по старому стандарту C. Функционально ничем не отличаются.
2) inline-ф-я помещается в код при каждом её вызове (этим она похожа на дефайн, но без его недостатков). Это позволяет экономить скорость при обращении к классу. Но размер проги увеличивается.

Ответ отправлен: 28.10.2003, 13:38
Отправитель: Morgion


Отвечает vitya

Приветствую Вас, Charodey!
Ничем, но второе является устаревшим объявлением функций в c. В C++ такие объявления вроде никогда даже и не использовались.

Ответ отправлен: 28.10.2003, 13:07
Отправитель: vitya


Отвечает BOLT

Приветствую Вас, Charodey!
1)Первое - реализация на C++, вторая на C.
2)Inline-функция компилятором вставляется в место ее вызова, т.е. это что-то типа
#define для макроподстановки. По идее, если юзать inline-функции, то процессор не будет обращатся к стеку, тем самым уменьшая время выполнения программы. Но компиляторы предупреждают, что такой метод не желателен. Почему? Точно сказать не могу... может это как-то влияет на кэш процессора.

Snoop Dogg:
Still Snoop Dogg and D-R-E (Guess who's back)
Still, still doing that shit, right?

This message was created by EMan 1.5


Ответ отправлен: 31.10.2003, 13:07
Отправитель: BOLT


Отвечает Andrew Vext

Приветствую Вас, Charodey!
Первое объявление соответсвует принятому стандарту языка. Второе объявление - так объявлялись функции в ранних версиях компиляторов (до принятия стандарта). В принципе они ничем не отличаются (и большинство компиляторов проглотит и тот и другой вариант), но для первого варианта прототип функции должен быть
int func(int, int)
а для второго
int func()
Inline-функция подставляется в место вызова (т.е. ее код вставляется в вызывающую функцию). Отсутствуют команды вызова функции и возврата.

Ответ отправлен: 28.10.2003, 13:19
Отправитель: Andrew Vext


Отвечает Yuri Gordienko

Здравствуйте, Charodey!
Второй вариант использовался в С-программах,- вопрос чисто стиля, т.е. на код никакого влияния нет.
Что ты понимаешь под "на уровне памяти"? Тело функции, объявленной как inline на усмотрение компилятора может встраиваться в то место, откуда вызывается, т.е. не будет никаких эпилогов и т.п. В то же время инлайновая функция
ничем не отличается от обычной по механизму использования, т.е. даже встроенная функция имеет адрес (и можно работать через этот адрес).
Успехов

Ответ отправлен: 28.10.2003, 12:46
Отправитель: Yuri Gordienko


Отвечает chebv

Здравствуйте, Charodey!
1. Объявления функций равнозначны. Просто второй вариант является как бы "устаревшим".
2. При компиляции программы в том месте, где описан вызов Inline-функции, подставляется непосредственно код этой функции, что должно влиять в лучшую сторону на быстродействие программы. Но из-за этого размер программы увеличивается.

Ответ отправлен: 28.10.2003, 17:49
Отправитель: chebv


 Вопрос № 1198

люди, помогите!!!!надо сдавать уже прогу, а я не могу даже приступить...объясните мне пожалуйста:
даются десять любых точек на плоскости - надо найти кол-во квадратов среди них....
я думаю так - но мне кажется неправильно - надо создать два массива для начала X и Y и занести в них соответственно координаты...затем открыть циклы по i и j и ...вот как дальше??? надо я так понимаю сравнить расстояния между четырьмя точками (их что по 4 брать??!!!как???) плюс надо узнать произведения соседних векторов (ну там их произведение равно нулю при угле в 90 градусов)... в общем я запуталась совсем, может я вообще неправильно думаю...подскажите идею...
заранее спасибо....только ответ пришлите как можно быстрее - горит!!!!!!



Вопрос отправлен: 28.10.2003, 17:24
Отправитель: Юлия

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

Отвечает chebv

Доброе время суток, Юлия!
В приложении указано, как перебрать все точки. Внутри цикла нужно вызывать функцию, которая бы проверяла, образуют ли точки квадрат. Идея такая:
1)находим все расстояния между точками - это 6 значений.
2)Из них 4 значения должны быть равны (стороны квадрата), два (max) - диагонали - также равны.
3)Осталось только определить точки, расположенные по диагонали друг к другу. Это будут точки, между которыми расстояние максимальное.
4) Теперь, если выполняется условие (2), то это квадрат.
Все.

Приложение:

Ответ отправлен: 29.10.2003, 08:16
Отправитель: chebv



Форма отправки вопроса

Внимание!
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+ или отправлять вопросы с сайта по адресу: http://rusfaq.ru/cgi-bin/Message.cgi.

(C) 2002-2003 Команда RusFAQ.ru.

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

Ваше имя:

Ваш e-mail:

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


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

Ваш вопрос:


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


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


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

Программисту
Assembler (31)
C / C++ (24)
Perl (3)
Builder / Delphi (22)
Pascal (20)
Basic / VBA (6)
Java / JavaScript (6)
PHP (11)
Криптография (8)
WinAPI (11)
Пользователю
Windows 95/98/Me (45)
Windows NT/2000/XP (59)
"Железо" (36)
Поиск информации (27)
Администратору
Windows NT/2000/XP (35)
Linux / Unix (13)
Юристу
Гражданское право (9)
Семейное право (6)
Трудовое право (6)
КоАП (6)

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




Задать вопрос | Регистрация эксперта | Поиск в базе | Чат | Форумы | Новости
Проект экспертов RusFAQ.ru | Фотоальбом | Virus.RusFAQ.ru | Администрирование
Профессиональная WEB-Студия B.I.T.


Яндекс цитирования
© 2001-2003 Россия, Москва. Авторское право: Калашников О.А.

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

В избранное