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

 
 
> Вопросы по 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
 
Start new topic
Ответов
SysRq
сообщение Apr 14 2009, 23:32
Сообщение #2


Чайник, 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
Сообщение #3





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
Сообщение #4


Чайник, 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
Guest_Скопидор_*
сообщение Apr 15 2009, 07:47
Сообщение #5





Guests






Цитата(SysRq @ Apr 15 2009, 05:45) *
Срочно читать как из .cpp получается .exe.

В 2 этапа: сначала по отдельности компилируем все файлы (получаем OBJ-файлы), потом линкуем. Правильно?



Цитата(SysRq @ Apr 15 2009, 05:45) *
Вы какой язык изучать собрались? C++? Инкапсуляция, наследование, и т.п. -- туда читайте. Вопрос отпадет. О глобальных переменных флудить не будем, тема уже была, ищите на форуме.

Т.е. если «очень постараться» ( smile.gif ) (ну не внимательно подойти к выбору идентификаторов в своей программе), то всё же есть вероятность «наступить на грабли» и случайно экранировать идентификаторы из стандартной библиотеки в своей проге? Я не говорю сейчас о своих идентификаторах, начинающихся на _, __ или заканчивающихся на _t.
Допустим, к примеру, я такой дуб, что не знал, что в библиотеке уже юзаются cin и cout. И взял, и переопределил их в своей проге. Может такое быть?


Цитата(SysRq @ Apr 15 2009, 05:45) *
За goto - секирбашка. Особенно в C++. Флудить не будем, тема уже была тоже.

Да я не собираюсь флудить, нужен или не нужен goto. Просто хотел узнать как это реализуется: осуществляется «прыжок» за пределы блока и при этом, КАК-ТО, восстанавливается контекст, сохранённый на входе в блок.

P.S. Прошу прощения, если мои вопросы кажутся глупыми, я ж говорю, я ламер.
Go to the top of the page
 
+Quote Post
ReAl
сообщение Apr 15 2009, 08:30
Сообщение #6


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Цитата(Скопидор @ Apr 15 2009, 10:47) *
Да я не собираюсь флудить, нужен или не нужен goto. Просто хотел узнать как это реализуется: осуществляется «прыжок» за пределы блока и при этом, КАК-ТО, восстанавливается контекст, сохранённый на входе в блок.
Обычно ничего никуда не сохраняется и не восстанавливается в таких блоках.
Код
voif foo()
{
    int i = 0;
    {
        char c;
        ...  
    }
    ++i;
    {
        long l;
        ...  
    }
    --i;
}
Компилятор анализирует всю функцию и в исполняемом коде уже на входе в функцию на стеке резервируется, грубо говоря
Код
struct {
    int i;
    union {
        char c;
        long l;
    };
} local_variables;
и больше стек туда-сюда не дёргается, просто происходит использование места на стеке в соответствии с деревом вложенных блоков кода. При минимальной современной оптимизации ещё и происходит анализ использования переменных и если какая-то используется до середины и дальше не нужна, а какая-то другая наоброт - используется только от середины (первое использование после последнего использования той), то они тоже накладываются в стеке для экономии его размера.
При этом переход по goto ничего не ломает (если он не обходит инициализацию переменной при попадании на метку, т.е. вопросы не к точке прыжка goto, а к точке приземления), так как структура/объединение на стеке остаются неподвижными, меняется только интерпретация.
Естественно, это так просто только для типов без конструкторов/деструкторов.
Особенно учитывая то, что во вложенных вызовах могут произойти исключения, которые подействуют "аналогично goto" с точки зрения этих объектов, а при отсутствии в данной функции try/catch её вообще всё "прошьёт". Поэтому для них в стековых кадрах функций устраиваются записи о деструкторах, которые необходимо выполнить при выходе из блока и порядке этих вызовов, при выходе из любого блока по goto/return/исключению просматриваются эти записи и вызываются необходимые деструкторы для автоматических объектов в блоках (unwind).
Код
#include <iostream>

class FOO
{
public:
    FOO(int i_) : i(i_) { std::cout << __PRETTY_FUNCTION__ << " (" << i << ")\n"; }
    ~FOO() { std::cout << __PRETTY_FUNCTION__ << " (" << i << ")\n"; }
private:
    int i;
};


int main(int ac, char **av)
{
    FOO f1(1);
    {
        FOO f2(2);
        if(ac == 1)
            goto aaa;
        // в случае перехода даже не сконструируется, но место на стеке под поле i зарезервировано заранее
        FOO f3(3);
    }
aaa:;
}

Вызываем с аргументом в командной строке (goto не выполняется)
Цитата
FOO::FOO(int) (1)
FOO::FOO(int) (2)
FOO::FOO(int) (3)
FOO::~FOO() (3)
FOO::~FOO() (2)
FOO::~FOO() (1)

Вызываем без аргумента
Цитата
FOO::FOO(int) (1)
FOO::FOO(int) (2)
FOO::~FOO() (2)
FOO::~FOO() (1)



Цитата(Скопидор @ Apr 15 2009, 11:09) *
А что такое «oak»?

http://www.abbyyonline.ru/Translate.aspx?l...1&words=oak
Можете для своих вещей выбрать другое имя. Можете несколько, для разных частей проекта свои.
Цитата(Скопидор @ Apr 15 2009, 11:09) *
Т.е. Ваше сообщение было к тому, что «сломать» очень сложно? Но ведь стандартная библиотека – это не только классы и шаблоны.
Оно к тому, что в языке есть средства для того, чтобы можно было не ломать.



Цитата(andrew_b @ Apr 15 2009, 11:19) *
Так это давным-давно deprecated.
У меня просто до сих пор в ходу mingw32-gcc 3.4.2 пятилетней давности, у него в backward/ ещё болтается всё smile.gif


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Скопидор   Вопросы по C от ламера   Apr 10 2009, 11:16
- - mdmitry   The C++ Programming Language Special 3rd Edition ...   Apr 10 2009, 13:08
- - SysRq   На Хабре было интересно: http://habrahabr.ru/blogs...   Apr 10 2009, 13:37
|- - Скопидор   Цитата(SysRq @ Apr 10 2009, 17:37) На Хаб...   Apr 10 2009, 18:29
- - Скопидор   Какие компиляторы (каких фирм) и начиная с какого ...   Apr 10 2009, 22:02
|- - andrew_b   Цитата(Скопидор @ Apr 11 2009, 02:02) Как...   Apr 13 2009, 05:32
- - ukpyr   ЦитатаДык объявлять каждую переменную в каждом из ...   Apr 14 2009, 21:23
- - Скопидор   Цитата(ukpyr @ Apr 15 2009, 01:23) правил...   Apr 14 2009, 21:42
|- - MrYuran   Цитата(Скопидор @ Apr 15 2009, 01:42) А к...   Apr 15 2009, 04:13
- - Скопидор   1.А обязательно ли в препроцессорной директиве #in...   Apr 14 2009, 22:13
|- - MrYuran   Цитата(Скопидор @ Apr 15 2009, 02:13) Ест...   Apr 15 2009, 04:31
|- - andrew_b   Цитата(Скопидор @ Apr 15 2009, 02:13) 1.А...   Apr 15 2009, 04:41
||- - Скопидор   Цитата(andrew_b @ Apr 15 2009, 08:41) Нич...   Apr 15 2009, 07:30
||- - MrYuran   Цитата(Скопидор @ Apr 15 2009, 11:30) И е...   Apr 15 2009, 07:41
||- - Скопидор   Цитата(MrYuran @ Apr 15 2009, 11:41) Хрен...   Apr 15 2009, 08:09
|- - Скопидор   Цитата(Скопидор @ Apr 15 2009, 02:13) 5.Е...   Apr 24 2009, 11:51
|- - Скопидор   Цитата(SysRq @ Apr 15 2009, 03:32) Неверн...   Apr 15 2009, 00:48
|- - Скопидор   Цитата(SysRq @ Apr 15 2009, 05:45) Срочно...   Apr 15 2009, 07:47
|- - ReAl   Цитата(Скопидор @ Apr 15 2009, 10:44) Доп...   Apr 15 2009, 07:54
||- - andrew_b   Цитата(ReAl @ Apr 15 2009, 11:54) Код#inc...   Apr 15 2009, 08:19
||- - Скопидор   Цитата(andrew_b @ Apr 15 2009, 12:19) Ну ...   Apr 15 2009, 08:39
||- - andrew_b   Цитата(Скопидор @ Apr 15 2009, 12:39) А д...   Apr 15 2009, 09:11
||- - Скопидор   Цитата(andrew_b @ Apr 15 2009, 13:11) Вид...   Apr 15 2009, 10:09
- - mdmitry   IDE сама может при создании файла прописать некото...   Apr 15 2009, 11:56
- - Скопидор   Вопрос №7. Можно ли использовать при объявлении (...   Apr 15 2009, 15:42
|- - SysRq   Цитата(Скопидор @ Apr 15 2009, 19:42) ......   Apr 15 2009, 20:00
||- - Скопидор   Цитата(SysRq @ Apr 16 2009, 00:00) Присва...   Apr 15 2009, 20:34
||- - demiurg_spb   Цитата(Скопидор @ Apr 16 2009, 00:34) А к...   Apr 15 2009, 21:52
|- - andrew_b   Цитата(Скопидор @ Apr 15 2009, 19:42) Воп...   Apr 16 2009, 04:48
|- - _Pasha   Цитата(Скопидор @ Apr 15 2009, 18:42) Воп...   Apr 16 2009, 10:35
- - Скопидор   Возвращаясь к обсуждению директивы #include. В не...   Apr 23 2009, 12:22
|- - andrew_b   Цитата(Скопидор @ Apr 23 2009, 15:28) Поя...   Apr 23 2009, 12:23
- - MrYuran   Ещё раз. Встретив директиву #include "filena...   Apr 23 2009, 12:27
|- - Скопидор   Цитата(MrYuran @ Apr 23 2009, 16:27) Код ...   Apr 23 2009, 12:35
|- - AndreyKeil   Цитата(Скопидор @ Apr 23 2009, 18:35) А м...   Apr 23 2009, 12:54
|- - Скопидор   Цитата(AndreyKeil @ Apr 23 2009, 16:54) Г...   Apr 23 2009, 13:03
|- - mdmitry   Цитата(Скопидор @ Apr 23 2009, 17:03) Т.е...   Apr 23 2009, 13:21
- - Скопидор   Дык всё-таки "раздельная компиляция" ест...   Apr 23 2009, 12:29
|- - andrew_b   Цитата(Скопидор @ Apr 23 2009, 16:29) Дык...   Apr 23 2009, 12:35
|- - MrYuran   Цитата(Скопидор @ Apr 23 2009, 16:29) Дык...   Apr 23 2009, 12:37
- - Скопидор   Т.е. препроцессор каким-то чудесным образом узнаёт...   Apr 23 2009, 12:51
|- - MrYuran   Цитата(Скопидор @ Apr 23 2009, 16:51) А е...   Apr 23 2009, 15:09
|- - Скопидор   Цитата(MrYuran @ Apr 23 2009, 19:09) В h-...   Apr 23 2009, 15:18
|- - MrYuran   Цитата(Скопидор @ Apr 23 2009, 19:18) Из ...   Apr 23 2009, 16:57
- - Скопидор   Вопрос №12 Как и для чего в C++ используется идент...   Apr 23 2009, 14:57
- - sergeeff   Все что имеется в h-файлах и не отключается команд...   Apr 23 2009, 15:38
|- - Скопидор   Цитата(sergeeff @ Apr 23 2009, 19:38) Вам...   Apr 23 2009, 17:36
- - SysRq   Скопидор, уймитесь с форматированием. Весеннее обо...   Apr 23 2009, 17:42
|- - Скопидор   Цитата(SysRq @ Apr 23 2009, 21:42) Скопид...   Apr 23 2009, 18:31
|- - singlskv   Цитата(Скопидор @ Apr 23 2009, 22:31) Да ...   Apr 23 2009, 18:46
|- - sergeeff   Цитата(Скопидор @ Apr 23 2009, 21:31) Да ...   Apr 23 2009, 19:02
- - AndreyKeil   Цитата(Скопидор @ Apr 24 2009, 00:31) Неп...   Apr 23 2009, 18:57
|- - rezident   Цитата(AndreyKeil @ Apr 24 2009, 00:57) А...   Apr 23 2009, 19:14
- - Скопидор   Цитата(singlskv @ Apr 23 2009, 22:46) Пат...   Apr 23 2009, 19:34
|- - singlskv   Цитата(Скопидор @ Apr 23 2009, 23:34) Ещё...   Apr 23 2009, 19:48
|- - Скопидор   Цитата(singlskv @ Apr 23 2009, 23:48) Раз...   Apr 23 2009, 20:26
|- - mdmitry   Цитата(Скопидор @ Apr 24 2009, 00:26) Вы ...   Apr 24 2009, 08:09
|- - Скопидор   Цитата(mdmitry @ Apr 24 2009, 12:09) Вы т...   Apr 24 2009, 09:03
|- - andrew_b   Цитата(Скопидор @ Apr 24 2009, 13:03) Кни...   Apr 24 2009, 09:08
||- - Скопидор   Цитата(andrew_b @ Apr 24 2009, 13:08) Не ...   Apr 24 2009, 09:17
|- - mdmitry   Цитата(Скопидор @ Apr 24 2009, 13:03) Кни...   Apr 24 2009, 09:34
|- - Скопидор   Цитата(mdmitry @ Apr 24 2009, 13:34) учас...   Apr 24 2009, 09:44
- - mdmitry   Какие книги смотрели? У Страуструпа про заголовочн...   Apr 23 2009, 19:43
- - Скопидор   Цитата(singlskv @ Apr 23 2009, 22:46) По ...   Apr 23 2009, 19:43
- - SysRq   Стоило остановиться еще там: Цитата(Скопидор ...   Apr 23 2009, 19:52
- - Скопидор   Цитата(singlskv @ Apr 23 2009, 22:46) #in...   Apr 23 2009, 20:07
|- - singlskv   Цитата(Скопидор @ Apr 24 2009, 00:07) Т.е...   Apr 23 2009, 20:13
|- - sergeeff   Цитата(Скопидор @ Apr 23 2009, 23:07) Я п...   Apr 23 2009, 20:17
|- - MrYuran   Цитата(Скопидор @ Apr 24 2009, 00:07) Т.е...   Apr 24 2009, 04:24
- - sergeeff   И в результате всей совместной деятельности форумч...   Apr 23 2009, 21:33
|- - Скопидор   Цитата(sergeeff @ Apr 24 2009, 01:33) И в...   Apr 24 2009, 07:31
- - SysRq   Новички C++!!! Это очень понятный язык...   Apr 24 2009, 13:48
|- - Скопидор   Цитата(SysRq @ Apr 24 2009, 17:48) Новичк...   Apr 24 2009, 14:16
|- - sergeeff   Цитата(Скопидор @ Apr 24 2009, 17:16) «Ес...   Apr 24 2009, 16:09
|- - Скопидор   Цитата(sergeeff @ Apr 24 2009, 20:09) Я н...   Apr 24 2009, 19:02
- - sergeeff   Понятно, хочется себя любимого втюхать кому-то как...   Apr 24 2009, 21:51
|- - Скопидор   Цитата(sergeeff @ Apr 25 2009, 01:51) Пон...   Apr 24 2009, 22:13
- - SysRq   Раз все выяснилось, предлагаю принять правила игры...   Apr 24 2009, 22:24
|- - Скопидор   Цитата(SysRq @ Apr 25 2009, 02:24) Раз вс...   Apr 24 2009, 23:32
|- - SysRq   Цитата(Скопидор @ Apr 25 2009, 03:32) Тог...   Apr 25 2009, 00:07
- - Andy Nikiforovv   Кто удаляет из исходника камменты (перед компиляци...   Apr 27 2009, 19:14
|- - sergeeff   Цитата(Andy Nikiforovv @ Apr 27 2009, 23...   Apr 27 2009, 19:18
|- - mdmitry   Цитата(Andy Nikiforovv @ Apr 27 2009, 23...   Apr 27 2009, 20:48
- - Andy Nikiforovv   Написано, что параметры командной строки для Borla...   Apr 27 2009, 20:14


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

 


RSS Текстовая версия Сейчас: 17th August 2025 - 11:33
Рейтинг@Mail.ru


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