Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Указатели
|
|||
|---|---|---|---|
|
#18+
MasterZivz, вопрос изначально был про ссылки, а не про указатели. ссылок в С нет. Название ссылка в C++ может приводить к путанице, так как в информатике, и в С в частности, под ссылкой понимается обобщенный концептуальный тип, а указатели и С++ ссылки являются специфическими реализациями ссылочного типа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2014, 15:42 |
|
||
|
Указатели
|
|||
|---|---|---|---|
|
#18+
SashaMercury, Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2014, 18:25 |
|
||
|
Указатели
|
|||
|---|---|---|---|
|
#18+
SashaMercury, Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. Хе-хе! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2014, 18:40 |
|
||
|
Указатели
|
|||
|---|---|---|---|
|
#18+
mayton Код: plaintext 1. 2. Если речь все-таки про С, то должно быть так: Код: plaintext 1. 2. потому что С не позволяет объявлять переменные вперемешку с кодом. А если про С++, то std::swap ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2014, 18:49 |
|
||
|
Указатели
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovsky, хех... добавлю в новых одинацдатых сях вон оно как определено: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. А второй шаблон насколько я понял определяет свап для двух векторов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2014, 18:54 |
|
||
|
Указатели
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovskymayton Код: plaintext 1. 2. Если речь все-таки про С, то должно быть так: Код: plaintext 1. 2. потому что С не позволяет объявлять переменные вперемешку с кодом. А если про С++, то std::swap Во первых, современный C - позволяет. Сейчас чтобы компилятор начал ругаться на объявление переменных не в начале блока надо специально включать режим совместимости со старыми стандартами. Во вторых, do while не обязателен даже в старых стандартах. Достаточно фигурных скобок. Главное чтобы блок был объявлен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2014, 19:14 |
|
||
|
Указатели
|
|||
|---|---|---|---|
|
#18+
White OwlВо первых, современный C - позволяет. Сейчас чтобы компилятор начал ругаться на объявление переменных не в начале блока надо специально включать режим Во вторых, do while не обязателен даже в старых стандартах. Достаточно фигурных скобок. Главное чтобы блок был объявлен. do while нужно чтобы макрос можно было применять везде где допустим вызов функции. А просто скобки не везде допустимы. Например это не будет работать Код: plaintext 1. 2. 3. 4. gcc умеет еще ({}) для тех же целей, но многие другие компиляторы не умеют. Ну а насчет "надо специально включать режим" ругани компилятора, это не совсем соответствует действительности. Например при сборке ядра и модулей линукса по умолчанию выдаются предупреждения на смешанный код. Так что обобщать тоже не надо. Поэтому если есть возможность без каких либо усилий сделать универсальный макрос для всех компиляторов С, не вижу причин делать макрос который будет работать только с некоторыми компиляторами / опциями, просто потому что это возможно. Главное достоинство С - это кроссплатформенность. Не стоит лишать его этого без веских причин. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2014, 04:49 |
|
||
|
Указатели
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyА просто скобки не везде допустимы. Например это не будет работать Код: plaintext 1. 2. 3. 4. Почему не будет??? У меня работает. Если макрос окружен просто скобками, то получится просто командный блок у if, а если с do{}while(0) то получится разовый цикл у if, который имеет в себе блок. В чем разница то? Anatoly Moskovskygcc умеет еще ({}) для тех же целей, но многие другие компиляторы не умеют.А кто-то пользуется чем-то другим? Какие странные люди. Anatoly MoskovskyНу а насчет "надо специально включать режим" ругани компилятора, это не совсем соответствует действительности. Например при сборке ядра и модулей линукса по умолчанию выдаются предупреждения на смешанный код. Так что обобщать тоже не надо.Ну так там этот режим включен. Для gcc это комбинация ключиков -std=c89 -pedantic. Для всех компиляторов у которых по умолчанию включен более поздний стандарт (а это все современные насколько я знаю) объявление переменной может быть где угодно, главное чтобы перед ее первым использованием... Anatoly MoskovskyПоэтому если есть возможность без каких либо усилий сделать универсальный макрос для всех компиляторов С, не вижу причин делать макрос который будет работать только с некоторыми компиляторами / опциями, просто потому что это возможно. Главное достоинство С - это кроссплатформенность. Не стоит лишать его этого без веских причин.В общем-то да. С этим утверждением спорить нельзя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2014, 05:55 |
|
||
|
Указатели
|
|||
|---|---|---|---|
|
#18+
White OwlПочему не будет??? У меня работает. Если макрос окружен просто скобками, то получится просто командный блок у if, а если с do{}while(0) то получится разовый цикл у if, который имеет в себе блок. В чем разница то? Если просто скобки, то макрос развернется в такой код Код: plaintext 1. 2. 3. 4. И я очень сомневаюсь, что он у вас "работает" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2014, 06:11 |
|
||
|
Указатели
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovsky, ну уел... :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2014, 07:34 |
|
||
|
Указатели
|
|||
|---|---|---|---|
|
#18+
mayton "мне хватило классического примера, чтобы не использовать эту директиву. Код: plaintext 1. 2. 3. 4. Понятно что будет правильно так как вы написали : Код: plaintext 1. Я примёл тот комментарий так как хотел прокомментировать, что использование директив препроцессора по типу #define чаще всего нежелательно. И вот кстати, такой общий вопрос. В теории языков программирования есть понятия аналогичное полноте пространства в математике, так вот интересно, можно ли сейчас обойтись вообще без таких замен кода подобных Код: plaintext 1. . То есть, можно ли написать программный код на языках C or С++ для любого алгоритма без использования данной директивы. И кстати, как я понимаю, без директив #include тоже можно обойтись, если вставлять код из библиотек вручную, но это гемор и бред конечно, наверное. Да и исчезнет функция предварительно откомпилированных заголовков, а это замедлит компиляцию/трансляцию программ. Мой вопрос касается только директивы #define. Anatoly Moskovsky Ваш спор, с коллегами mayton и White Owl , очень интересен, я уверен что из него можно извлечь много информации, сейчас буду изучать, ибо пока вопросов слишком много ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2014, 02:23 |
|
||
|
Указатели
|
|||
|---|---|---|---|
|
#18+
//надо всё-таки использовать предварительный просмотр "Я примёл тот комментарий так как хотел прокомментировать, что использование директив препроцессора по типу #define чаще всего нежелательно." так как может привести к трудновыявивым ошибкам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2014, 02:26 |
|
||
|
Указатели
|
|||
|---|---|---|---|
|
#18+
SashaMercuryИ кстати, как я понимаю, без директив #include тоже можно обойтись, если вставлять код из библиотек вручную, но это гемор и бред конечно, наверное. Это скорее всего бред ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2014, 11:24 |
|
||
|
Указатели
|
|||
|---|---|---|---|
|
#18+
maytonSashaMercuryИ кстати, как я понимаю, без директив #include тоже можно обойтись, если вставлять код из библиотек вручную, но это гемор и бред конечно, наверное. Это скорее всего бред Ну почти бред :) Сейчас ведется развитие С++ в сторону директивы import которая должна заменить #include в том же смысле как инлайн функции заменили макросы. То есть это будет не препроцессинг, а полноценная фича языка. Первыми идет в этом направлении Clang. Посмотрим что получится. Как минимум скорость компиляции должна будет улучшиться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2014, 13:31 |
|
||
|
Указатели
|
|||
|---|---|---|---|
|
#18+
А ведь большие голубые пилили такую фишку в Visual Age C++ ... Но, линейка сдохла и фишки нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2014, 17:10 |
|
||
|
Указатели
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovsky, C++ и так сложен макропроцессингом и шаблонами. А добавление к нему еще и директив статического импорта сделает бинарь непрогнозируемо большим и запутанным. Я-бы лучше двигался в сторону создания С++ runtime. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2014, 17:52 |
|
||
|
Указатели
|
|||
|---|---|---|---|
|
#18+
mayton, Импорт как раз упростит все. Да и рантайм и так уже есть: libc + libstdc++ :) А кому страшно, пусть сидит в своей джаве ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2014, 18:14 |
|
||
|
Указатели
|
|||
|---|---|---|---|
|
#18+
Толик. Кольцо власти жжёт мне руку... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2014, 18:22 |
|
||
|
Указатели
|
|||
|---|---|---|---|
|
#18+
SashaMercuryИ кстати, как я понимаю, без директив #include тоже можно обойтись, если вставлять код из библиотек вручную, но это гемор и бред конечно, наверное. maytonЭто скорее всего бред Anatoly Moskovsky Ну почти бред :) Согласен. а в целом, я был прав ? Такие вставки в код программы теоретически возможны ? maytonAnatoly Moskovsky, C++ и так сложен макропроцессингом и шаблонами не так много работал с шаблонами.Но всё же. В С тип данных каждой переменной устанавливаются во время компиляции, используется статическая типизация. И это с одной стороны здорово, уменьшаем количество возможных ошибок, увеличиваем скорость работы программы, во время выполнения программы не происходят проверки типов. Это в сравнении с динамической типизацией. Есть и минусы, например нам необходимо отсортировать массив чисел, и было бы здорово если бы могли написать void sorting(any_type arr[]), вот в этом случае шаблоны (или ,как я понимаю, обобщённое программирование) будут очень удобны. Значит он не сложен шаблонами, а наоборот, хорошо что в нём есть шаблоны. Что я упускаю ? Почему он сложен ими ? Basil A. Sidorov большие голубые Кто такие большие голубые ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2014, 05:03 |
|
||
|
Указатели
|
|||
|---|---|---|---|
|
#18+
Можно ли задать переменной адрес где она будет находиться ? f e: int a; &a=0x123; Наверное нет ? Почему ? А если да, то подскажите пожалуйста как ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2014, 05:12 |
|
||
|
Указатели
|
|||
|---|---|---|---|
|
#18+
SashaMercuryСогласен. а в целом, я был прав ? Такие вставки в код программы теоретически возможны ?Возможны. SashaMercuryне так много работал с шаблонами.Но всё же. В С тип данных каждой переменной устанавливаются во время компиляции, используется статическая типизация. И это с одной стороны здорово, уменьшаем количество возможных ошибок, увеличиваем скорость работы программы, во время выполнения программы не происходят проверки типов. Это в сравнении с динамической типизацией. Есть и минусы, например нам необходимо отсортировать массив чисел, и было бы здорово если бы могли написать void sorting(any_type arr[]), вот в этом случае шаблоны (или ,как я понимаю, обобщённое программирование) будут очень удобны. Значит он не сложен шаблонами, а наоборот, хорошо что в нём есть шаблоны. Что я упускаю ? Почему он сложен ими ?Потому что есть очень мало задач в которых подобный "any_type" имеет смысл. Но любители шаблонов умудряются писать их для каждого чиха. SashaMercuryКто такие большие голубые ?IBM SashaMercuryМожно ли задать переменной адрес где она будет находиться ? f e: int a; &a=0x123; Наверное нет ? Почему ? А если да, то подскажите пожалуйста как Потому что нет никакой разницы на каком адресе находится переменная. Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2014, 08:03 |
|
||
|
Указатели
|
|||
|---|---|---|---|
|
#18+
White Owl Потому что нет никакой разницы на каком адресе находится переменная. Я не могу спорить по этому поводу. Но не убедился что это действительно так. А если это так, то тогда объясните почему программе совершенно безразлично где хранятся данные, и почему это нигде не может понадобиться ? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Иногда вылетает на 100 шаге, а иногда на 500. С чем это связано ? С тем размером памяти что выделен в данный момент потоку программы в ОП ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2014, 09:21 |
|
||
|
Указатели
|
|||
|---|---|---|---|
|
#18+
SashaMercuryWhite Owl Потому что нет никакой разницы на каком адресе находится переменная. Я не могу спорить по этому поводу. Но не убедился что это действительно так. А если это так, то тогда объясните почему программе совершенно безразлично где хранятся данные, и почему это нигде не может понадобиться ? Потому что ОС решает где выделить место и дает программе адрес этого места. За пределы этого места лезть не стоит, т.к. оно выделено для других переменных. Есть хорошая книжка где это расписано подробно: Джеффри Рихтер "Windows для профессионалов". ЧАСТЬ III УПРАВЛЕНИЕ ПАМЯТЬЮ (по ссылке скан позорненький, поищи с лучшим качеством или бумажную купи) Книга хорошая, расписаны все внутренние особенности виндовса. Я по ней изучал когда-то. SashaMercuryИногда вылетает на 100 шаге, а иногда на 500. С чем это связано ? С тем размером памяти что выделен в данный момент потоку программы в ОП ? Если кратко: память выделяется страницами (по 4Кб если не ошибаюсь), пока ты читаешь выделенную память - работает, как только натыкаешься на адрес под который не выделена реальная память - вылетает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2014, 09:40 |
|
||
|
Указатели
|
|||
|---|---|---|---|
|
#18+
ребята, о чем топик? просто поговорить? есть какие-то новые вопросы -- делайте новые топики. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2014, 10:33 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=38541417&tid=2019729]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
71ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
| others: | 12ms |
| total: | 179ms |

| 0 / 0 |
