|
|
  |
Вопросы по C от ламера, В книжках ответа чёта не нахожу |
|
|
Guest_Скопидор_*
|
Apr 10 2009, 11:16
|
Guests

|
Зачем вообще нужно ключевое слово «auto»? Ведь классификатор(или квалификатор? как это слово точно называется?) памяти «auto» никак не используется ( по крайней мере в исходниках разных разработчиков я его не видел). Т.к. глобальные переменные не могут быть « auto», а локальные и так по умолчанию «auto».
Сообщение отредактировал Скопидор - Apr 10 2009, 11:19
|
|
|
|
Guest_Скопидор_*
|
Apr 10 2009, 18:29
|
Guests

|
Цитата(SysRq @ Apr 10 2009, 17:37)  На Хабре было интересно: http://habrahabr.ru/blogs/cpp/25330/ (с подзаголовка "Ты где был, auto?"). " ... Спустя три десятка лет стандарт C++09 вновь вводит ключевое слово auto. Переменная, определённая под этим ключевым словом автоматически приобретёт тип при инциализации. ... "©Обана!  Ахринеть А в книжках Павловской и Подбельского об этом использовании ключевого слова "auto" ни звука P.S. Спасибо огромное за ответы, Господа mdmitry и SysRq.
Сообщение отредактировал Скопидор - Apr 10 2009, 18:31
|
|
|
|
Guest_Скопидор_*
|
Apr 10 2009, 22:02
|
Guests

|
Какие компиляторы (каких фирм) и начиная с какого года поддерживают ключевое слово "export" (т.е. экспорт шаблонов функций и классов)?
И есть ли Freeware компиляторы C++, с объёмом до 10МБ, которые ПОЛНОСТЬЮ поддерживают самый последний стандарт C++
Почему после того, как я вместо iostream.h стал юзать iostream объём экзешника вырос с 0.2МБ до почти о.5МБ?
|
|
|
|
Guest_Скопидор_*
|
Apr 14 2009, 20:40
|
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
|
|
|
|
Guest_Скопидор_*
|
Apr 14 2009, 21:42
|
Guests

|
Цитата(ukpyr @ Apr 15 2009, 01:23)  правильно, в хидере каждого модуля обьявляются публичные переменные, видимые в других модулях. Подключаем .h файл - и получаем доступ к публичным переменным. А в .с файле модуля объявляются внутренние переменные модуля. А как из файла main_1.c я получу доступ к "публичным" переменным файла "main_2.h"?
Сообщение отредактировал Скопидор - Apr 14 2009, 21:44
|
|
|
|
Guest_Скопидор_*
|
Apr 14 2009, 22:13
|
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
|
|
|
|
|
Apr 14 2009, 23:32
|

Чайник, 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-файла. А бывают ли случаи, когда наоборот... Неверное понятие сути, нет там экспортирования никакого. Это паззл, если хотите  Цитата(Скопидор @ Apr 15 2009, 02:13)  Если main – функция, то можно ли её рекурсивно вызвать внутри её самой? Зависит от того, как она определена, от атрибутов ее. Сохранение контекста и прочее... Цитата(Скопидор @ Apr 15 2009, 02:13)  Как избежать в своей программе непреднамеренного «экранирования» идентификаторов из стандартной библиотеки? Читать документацию на используемые бибилиотеки.
|
|
|
|
Guest_Скопидор_*
|
Apr 15 2009, 00:48
|
Guests

|
Цитата(SysRq @ Apr 15 2009, 03:32)  Неверное понятие сути, нет там экспортирования никакого. Это паззл, если хотите  Ну как же. Например, я могу описать в h-файле прототип функции f1 и юзать его внутри тела функции f2, которая определена в h-файле. А вот конкретная реализация f1 будет содержаться в файле, в который будет вложен h-файл, т.е. как бы будет импортироваться из основного файла. Т.е. получается, что реализация f2 будет зависеть от того, куда будет вложен h-файл. Цитата(SysRq @ Apr 15 2009, 03:32)  Зависит от того, как она определена, от атрибутов ее. Сохранение контекста и прочее... Т.е. в принципе возможно юзать вызовы main внутри тела main? Цитата(SysRq @ Apr 15 2009, 03:32)  Читать документацию на используемые бибилиотеки. И больше никак? Т.е. я при выборе каждого идентификатора в своей проге должен смотреть: «а нет ли точно такого же идентификатора в стандартной библиотеке». Так? А насчёт перепрыгивания участка восстановления контекста из стека что скажете?
|
|
|
|
|
Apr 15 2009, 01:45
|

Чайник, 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++. Флудить не будем, тема уже была тоже.
|
|
|
|
|
Apr 15 2009, 04:31
|

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

|
Цитата(Скопидор @ Apr 15 2009, 02:13)  Есть прога: ... На входе в блок2, я так понимаю, компилятор сохранит в стеке регистровый контекст C чего бы это вдруг? Цитата и выделит в стеке память под локальную переменную I. А на выходе компилятор должен будет восстановить контекст (в том числе указатель стека), который был непосредственно перед входом в блок2. Никому он ничего не должен. Блок {} означает всего лишь составной оператор, никаких переходов и контекстов не имеется в виду.
Причина редактирования: Излишнее цитирование.
--------------------
Программирование делится на системное и бессистемное. ©Моё :) — а для кого-то БГ — это Bill Gilbert =)
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|