реклама на сайте
подробности

 
 
6 страниц V   1 2 3 > »   
Closed TopicStart new topic
> Вопросы по C от ламера, В книжках ответа чёта не нахожу
Guest_Скопидор_*
сообщение Apr 10 2009, 11:16
Сообщение #1





Guests






Зачем вообще нужно ключевое слово «auto»?
Ведь классификатор(или квалификатор? как это слово точно называется?) памяти «auto» никак не используется ( по крайней мере в исходниках разных разработчиков я его не видел).
Т.к. глобальные переменные не могут быть « auto», а локальные и так по умолчанию «auto».

Сообщение отредактировал Скопидор - Apr 10 2009, 11:19
Go to the top of the page
 
+Quote Post
mdmitry
сообщение Apr 10 2009, 13:08
Сообщение #2


Начинающий профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 25-10-06
Из: СПб
Пользователь №: 21 648



The C++ Programming Language Special 3rd Edition Bjarne Stroustrup
Appendix C
C.9 Memory Management

Первоисточник, однако rolleyes.gif


--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
Go to the top of the page
 
+Quote Post
SysRq
сообщение Apr 10 2009, 13:37
Сообщение #3


Чайник, 1 литр
****

Группа: Свой
Сообщений: 655
Регистрация: 17-05-06
Из: Moscow
Пользователь №: 17 168



На Хабре было интересно: http://habrahabr.ru/blogs/cpp/25330/ (с подзаголовка "Ты где был, auto?").
Go to the top of the page
 
+Quote Post
Guest_Скопидор_*
сообщение Apr 10 2009, 18:29
Сообщение #4





Guests






Цитата(SysRq @ Apr 10 2009, 17:37) *
На Хабре было интересно: http://habrahabr.ru/blogs/cpp/25330/ (с подзаголовка "Ты где был, auto?").


" ... Спустя три десятка лет стандарт C++09 вновь вводит ключевое слово auto. Переменная, определённая под этим ключевым словом автоматически приобретёт тип при инциализации. ... "©
Обана! rolleyes.gif Ахринеть

А в книжках Павловской и Подбельского об этом использовании ключевого слова "auto" ни звука unsure.gif

P.S. Спасибо огромное за ответы, Господа mdmitry и SysRq.

Сообщение отредактировал Скопидор - Apr 10 2009, 18:31
Go to the top of the page
 
+Quote Post
Guest_Скопидор_*
сообщение Apr 10 2009, 22:02
Сообщение #5





Guests






Какие компиляторы (каких фирм) и начиная с какого года поддерживают ключевое слово "export" (т.е. экспорт шаблонов функций и классов)?

И есть ли Freeware компиляторы C++, с объёмом до 10МБ, которые ПОЛНОСТЬЮ поддерживают самый последний стандарт C++

Почему после того, как я вместо iostream.h стал юзать iostream объём экзешника вырос с 0.2МБ до почти о.5МБ?
Go to the top of the page
 
+Quote Post
andrew_b
сообщение Apr 13 2009, 05:32
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 975
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757



Цитата(Скопидор @ Apr 11 2009, 02:02) *
Какие компиляторы (каких фирм) и начиная с какого года поддерживают ключевое слово "export" (т.е. экспорт шаблонов функций и классов)?

И есть ли Freeware компиляторы C++, с объёмом до 10МБ, которые ПОЛНОСТЬЮ поддерживают самый последний стандарт C++

Почему после того, как я вместо iostream.h стал юзать iostream объём экзешника вырос с 0.2МБ до почти о.5МБ?


Думаю, вам лучше обратиться на более специализированный ресурс. На RSDN, например. Для участия в профильных форумах там регистрироваться не обязательно.
Go to the top of the page
 
+Quote Post
Guest_Скопидор_*
сообщение Apr 14 2009, 20:40
Сообщение #7





Guests






Цитата(Student Pupkin @ Apr 13 2009, 23:15) *
Но я думал, что по общепринятым правилам следовало в одном из модулей обявить все эти глобальные переменные обычным образом, а в остальных - с квалификатором extern...

Дык объявлять каждую переменную в каждом из N модулей запарисся. Да и вероятность ошибки возрастает
................................................................................
.......





А Вы, BSVi, Сами себе противоречите.

С одной стороны Вы пишите:
Цитата(BSVi @ Apr 14 2009, 10:36) *
... внимание, в заголовках нельзя обьявлть переменные. кроме констант


А с другой пишите:

Цитата(BSVi @ Apr 14 2009, 10:36) *
... переменные .... лучше сделать отдельным модулем global_vars.c и global_vars.h

А разве global_vars.h - это не заголовочный файл?

Сообщение отредактировал Скопидор - Apr 14 2009, 20:41
Go to the top of the page
 
+Quote Post
ukpyr
сообщение Apr 14 2009, 21:23
Сообщение #8


Профессионал
*****

Группа: Участник
Сообщений: 1 264
Регистрация: 17-06-08
Из: бандустан
Пользователь №: 38 347



Цитата
Дык объявлять каждую переменную в каждом из N модулей запарисся. Да и вероятность ошибки возрастает
правильно, в хидере каждого модуля обьявляются публичные переменные, видимые в других модулях. Подключаем .h файл - и получаем доступ к публичным переменным. А в .с файле модуля объявляются внутренние переменные модуля.
Go to the top of the page
 
+Quote Post
Guest_Скопидор_*
сообщение Apr 14 2009, 21:42
Сообщение #9





Guests






Цитата(ukpyr @ Apr 15 2009, 01:23) *
правильно, в хидере каждого модуля обьявляются публичные переменные, видимые в других модулях. Подключаем .h файл - и получаем доступ к публичным переменным. А в .с файле модуля объявляются внутренние переменные модуля.

А как из файла main_1.c я получу доступ к "публичным" переменным файла "main_2.h"?

Сообщение отредактировал Скопидор - Apr 14 2009, 21:44
Go to the top of the page
 
+Quote Post
Guest_Скопидор_*
сообщение Apr 14 2009, 22:13
Сообщение #10





Guests






1.А обязательно ли в препроцессорной директиве #include использовать файлы с расширением .h ? Т.е. могу ли, например, написать файл с раширением .my и вложить его содержимое в основной файл с помощью директивы #include?



2. Почему директиву #include используют в начале файла? А существуют ли случаи, когда выгодно использовать эту директиву в середине, или даже в конце основного файла? И что это за случаи?

3. Использование #include подразумевает экспортирование ресурсов из .h-файла. А бывают ли случаи, когда наоборот, вкладываемый файл импортирует ресурсы из того файла, в который он вкладывается? Если да, то что это за случаи?

Цитата(andrew_b @ Apr 13 2009, 09:32) *
Думаю, вам лучше обратиться на более специализированный ресурс. На RSDN, например.

Ссылка битая. Сайт не грузится


4.

Есть прога:

Код
void main(void)
{
     int I = 1;
     {    // блок2
          int I = 2;
          goto Exit;
          // ---------------
          I++;
     }
     I = 4;
     // ------------------
     Exit:;
     I = 3;
}
На входе в блок2, я так понимаю, компилятор сохранит в стеке регистровый контекст и выделит в стеке память под локальную переменную I. А на выходе компилятор должен будет восстановить контекст (в том числе указатель стека), который был непосредственно перед входом в блок2.
Но т.к. выполняется команда перехода за пределы блока2, то получается, что команды восстановления контекста из стека будут пропущены?





5.Если main – функция, то можно ли её рекурсивно вызвать внутри её самой?



6. Как избежать в своей программе непреднамеренного «экранирования» идентификаторов из стандартной библиотеки?

Сообщение отредактировал Скопидор - Apr 14 2009, 22:17
Go to the top of the page
 
+Quote Post
SysRq
сообщение Apr 14 2009, 23:32
Сообщение #11


Чайник, 1 литр
****

Группа: Свой
Сообщений: 655
Регистрация: 17-05-06
Из: Moscow
Пользователь №: 17 168



Цитата(Скопидор @ Apr 11 2009, 02:02) *
Почему после того, как я вместо iostream.h стал юзать iostream объём экзешника вырос с 0.2МБ до почти о.5МБ?
wcin, wcout...

Цитата(Скопидор @ Apr 15 2009, 02:13) *
А обязательно ли в препроцессорной директиве #include использовать файлы с расширением .h ?
Нет. Часто применяется, к примеру, .hpp. Аналогия C -- .c, C++ -- .cpp.

Цитата(Скопидор @ Apr 15 2009, 02:13) *
...когда выгодно использовать эту директиву в середине, или даже в конце основного файла?
Когда выгодно! Скажем, изменить макрос какой-нить, используемый в исходнике, вставив .h-файл с ifdef-undef-define этого макроса в середину исходника, и пусть враги догадываются почему мой спёртый ими исходник у них не работает.

Цитата(Скопидор @ Apr 15 2009, 02:13) *
Использование #include подразумевает экспортирование ресурсов из .h-файла. А бывают ли случаи, когда наоборот...
Неверное понятие сути, нет там экспортирования никакого. Это паззл, если хотите smile.gif

Цитата(Скопидор @ Apr 15 2009, 02:13) *
Если main – функция, то можно ли её рекурсивно вызвать внутри её самой?
Зависит от того, как она определена, от атрибутов ее. Сохранение контекста и прочее...

Цитата(Скопидор @ Apr 15 2009, 02:13) *
Как избежать в своей программе непреднамеренного «экранирования» идентификаторов из стандартной библиотеки?
Читать документацию на используемые бибилиотеки.
Go to the top of the page
 
+Quote Post
Guest_Скопидор_*
сообщение Apr 15 2009, 00:48
Сообщение #12





Guests






Цитата(SysRq @ Apr 15 2009, 03:32) *
Неверное понятие сути, нет там экспортирования никакого. Это паззл, если хотите smile.gif

Ну как же. Например, я могу описать в h-файле прототип функции f1 и юзать его внутри тела функции f2, которая определена в h-файле. А вот конкретная реализация f1 будет содержаться в файле, в который будет вложен h-файл, т.е. как бы будет импортироваться из основного файла. Т.е. получается, что реализация f2 будет зависеть от того, куда будет вложен h-файл.


Цитата(SysRq @ Apr 15 2009, 03:32) *
Зависит от того, как она определена, от атрибутов ее. Сохранение контекста и прочее...

Т.е. в принципе возможно юзать вызовы main внутри тела main?


Цитата(SysRq @ Apr 15 2009, 03:32) *
Читать документацию на используемые бибилиотеки.

И больше никак? Т.е. я при выборе каждого идентификатора в своей проге должен смотреть: «а нет ли точно такого же идентификатора в стандартной библиотеке». Так?


А насчёт перепрыгивания участка восстановления контекста из стека что скажете?
Go to the top of the page
 
+Quote Post
SysRq
сообщение Apr 15 2009, 01:45
Сообщение #13


Чайник, 1 литр
****

Группа: Свой
Сообщений: 655
Регистрация: 17-05-06
Из: Moscow
Пользователь №: 17 168



Цитата(Скопидор @ Apr 15 2009, 04:48) *
Ну как же.
Срочно читать как из .cpp получается .exe.

Цитата(Скопидор @ Apr 15 2009, 04:48) *
Т.е. в принципе возможно юзать вызовы main внутри тела main?
Можно. Поищите еще "точка входа".

Цитата(Скопидор @ Apr 15 2009, 04:48) *
Т.е. я при выборе каждого идентификатора в своей проге должен..
Вы какой язык изучать собрались? C++? Инкапсуляция, наследование, и т.п. -- туда читайте. Вопрос отпадет. О глобальных переменных флудить не будем, тема уже была, ищите на форуме.
Как правило хорошего тона afaik не следует использовать _такие и __такие вот идентификаторы в прикладной программе.

Цитата(Скопидор @ Apr 15 2009, 04:48) *
А насчёт перепрыгивания...
За goto - секирбашка. Особенно в C++. Флудить не будем, тема уже была тоже.
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Apr 15 2009, 04:13
Сообщение #14


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(Скопидор @ Apr 15 2009, 01:42) *
А как из файла main_1.c я получу доступ к "публичным" переменным файла "main_2.h"?

Код
/*
*  main_1.c
*/

#include main_2.h

...


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Apr 15 2009, 04:31
Сообщение #15


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(Скопидор @ Apr 15 2009, 02:13) *
Есть прога:
...
На входе в блок2, я так понимаю,
компилятор сохранит в стеке регистровый контекст
C чего бы это вдруг? 07.gif
Цитата
и выделит в стеке память под локальную переменную I. А на выходе компилятор должен будет восстановить контекст (в том числе указатель стека), который был непосредственно перед входом в блок2.
Никому он ничего не должен. Блок {} означает всего лишь составной оператор, никаких переходов и контекстов не имеется в виду.
Причина редактирования: Излишнее цитирование.


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post

6 страниц V   1 2 3 > » 
Closed TopicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th June 2025 - 21:28
Рейтинг@Mail.ru


Страница сгенерированна за 0.01474 секунд с 7
ELECTRONIX ©2004-2016