EdgeAligned 79 20 февраля Опубликовано 20 февраля · Жалоба nullptr в С++ это отдельная штука (ключевое слово) на уровне компилятора, и его разыменование невозможно. А тех языках, где NULLPTR определён просто как дефайн, равный 0, там при разименовании получится обращение к адресу 0.. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 165 20 февраля Опубликовано 20 февраля · Жалоба 6 минут назад, vvppvv сказал: Поэтому мне явно указаный "0" с приведением типа как-то спокойнее, чем "нулл" из какой-то библиотеки. :)) Вам дело говорят - nullptr это правильным образом описанный нулевой указатель. Разыменование и nullptr, и 0, это undefined behavior. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vvppvv 0 20 февраля Опубликовано 20 февраля · Жалоба 3 minutes ago, EdgeAligned said: nullptr в С++ это отдельная штука (ключевое слово) на уровне компилятора, и его разыменование невозможно. А тех языках, где NULLPTR определён просто как дефайн, равный 0, там при разименовании получится обращение к адресу 0.. Так получилось, что к Си я пришёл через ассемблер. Если процессор допускает косвенный вызов функции с адреса 0х0000 (т.н. "мягкий" или "софтверный" ресет), а стандарт языка такое не допускает, то зачем мне такой язык нужен? Я больше железячник, а не программист. Мне ехать, а не шашечки. )) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 22 20 февраля Опубликовано 20 февраля · Жалоба 24 minutes ago, vvppvv said: Поэтому мне явно указаный "0" с приведением типа как-то спокойнее ну в таком случае осторожнее пользуйтесь компилятором, а лучше сразу в машинных кода, а то вдруг компилятор нарушит свои же обязательства )))) 11 minutes ago, vvppvv said: чем "нулл" из какой-то библиотеки NULL - это по сути просто макрос, описанный внутри stdlib, это и есть 0, во всех компиляторах: #define NULL ((void *) 0) а nullptr - это вообще ключевое слово из плюсов, обязательное начиная с C++11: https://ru.wikipedia.org/wiki/Nullptr stddef.h: #ifdef __cplusplus typedef decltype(nullptr) nullptr_t; #endif nullptr компилятор сам автоматом приводит к нужному типу, исключая необходимость приведения типов, как это иногда требовалось для NULL, что сильно разгружает код и поскольку nullptr - ключевое слово компилятора, то оно подкрашивается в среде и сразу бросается в глаза, к слову, во всех своих старых проектах при случае убираю NULL где вижу и заменяю на уже "каноничное" nullptr )) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vvppvv 0 20 февраля Опубликовано 20 февраля · Жалоба 15 minutes ago, Arlleex said: Вам дело говорят - nullptr это правильным образом описанный нулевой указатель. "Error[Pe020]: identifier "nullptr" is undefined D:\_Workdir\ (.......)\main.c 499 " И в то же время 499 rc_Count_Ptr = 0; \ ??main_11: \ 000001C8 24EE CLR R14 \ 000001CA 24FF CLR R15 Я так думаю, что nullptr - это для С++. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 22 20 февраля Опубликовано 20 февраля · Жалоба 5 minutes ago, vvppvv said: Так получилось, что к Си я пришёл через ассемблер. ну, так получилось, что тут практически все прошли такой же путь, просто кто-то уже ушел чуть дальше 😉 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vvppvv 0 20 февраля Опубликовано 20 февраля (изменено) · Жалоба 5 minutes ago, Forger said: и поскольку nullptr - ключевое слово компилятора, то оно подкрашивается в среде и сразу бросается в глаза, Да, компилятор его подкорашивает! Но т.к. я пишу в Си, ругается: "Error[Pe020]: identifier "nullptr" is undefined" Изменено 20 февраля пользователем vvppvv Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 22 20 февраля Опубликовано 20 февраля · Жалоба 37 minutes ago, vvppvv said: Я так думаю, что nullptr - это для С++. так и есть, выше постом ссылка на соотв страницу в википедии )) 36 minutes ago, vvppvv said: Но т.к. я пишу в Си, ругается: ну и кто в этом виноват? )) переходите на плюсы 😎 начнется правда ругань другого рода )) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vvppvv 0 20 февраля Опубликовано 20 февраля (изменено) · Жалоба 23 minutes ago, Forger said: переходите на плюсы 😎 начнется правда ругать другого рода )) Я когда-то давно пробовал перейти на С++. Ну как же, это модно, нужно быть в тренде. и пр. Потом понял, что эти костыли были придуманы для человека, мыслящего как человек и неспособного мыслить как процессор. А как известно, чтобы японскому мастеру нарисовать корову - надо стать коровой. :)))) Потому я не стал себя больше насиловать, натягивая противоестественное, и скатился обратно к натуралам, в нативный для AVR Си-ассемблер. Изменено 20 февраля пользователем vvppvv Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 22 20 февраля Опубликовано 20 февраля · Жалоба 6 minutes ago, vvppvv said: Ну как же, это модно, нужно быть в тренде. и пр. Не надо слушать всяких "маркетологов", плюсы - это такой же инструмент, как и просто С. Ну, не получилось освоить сходу плюсы, так значит или не пришло время или нет таких задач, кто он реально требуется. Если всю жисть привыкли работать "молотком и топором" и результат вас полностью устраивает, то более тонкие инструменты вам совсем не нужны ) К таким "инструментам тонкой работы" приходят по необходимости, когда уже "молотком и топором" тупо не получается хорошо сделать то, что требуется. 11 minutes ago, vvppvv said: Потому я не стал себя больше насиловать и правильно, дело это противоестественное )) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
EdgeAligned 79 20 февраля Опубликовано 20 февраля · Жалоба 36 минут назад, vvppvv сказал: Так получилось, что к Си я пришёл через ассемблер. Если процессор допускает косвенный вызов функции с адреса 0х0000 (т.н. "мягкий" или "софтверный" ресет) Многие из нас, кто старше 35-40, пришли через ассемблер. И когда я переходил на Си, мне тоже казалось - блин, че за дела, я привык всё контролировать сам и я мыслю как процессор! Но ни че, со временем втянулся и понял - а накой мне контролировать каждый такт, каждую инструкцию. И тогда у меня появилось больше времени на разработку прикладных алгоритмов и мои поделки стали более навороченными. Кстати, не все МК имеют старт программы с 0ч0000. Например, в АРМ нулевой адрес - это место таблицы векторов, которая уже и определяет, с какого адреса начнется программа. (Если быть точным, то адрес 0x0000'0004 содержит адрес, по которому МК перейдет и выполнит первую рабочую инструкцию). Поэтому, NULL равный 0 - это просто условность для проверки на число, которое не может быть адресом исполняемой инструкции или данных. Этот 0 служит только для проверки. Кстати, в C++ nullptr тоже численно равен 0. Но для компилятора nullptr имеет еще и дополнительный смысл. Или вот еще нуль-терминированная строка ANSI-символов, которая содержит 0 в конце, как признак завершения ANSI-данных в строке. PS. Между прочим, вот в Адруине хоть и AVR, но на "богомерзком" для AVR языке С++ 🙂 🙂 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 165 20 февраля Опубликовано 20 февраля · Жалоба 1 час назад, vvppvv сказал: Да, компилятор его подкорашивает! Но т.к. я пишу в Си, ругается: "Error[Pe020]: identifier "nullptr" is undefined" NULL для Си. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
EdgeAligned 79 20 февраля Опубликовано 20 февраля · Жалоба Кстати, можно создать С/С++ проект с плюсомым компилятор ом, но писать в стиле Си, не используя инструментов ++ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 22 20 февраля Опубликовано 20 февраля · Жалоба 5 minutes ago, EdgeAligned said: Кстати, можно создать С/С++ проект с плюсомым компилятор ом, но писать в стиле Си, не используя инструментов ++ и это все ради доступа к nullptr? )) достаточно просто переименовать файлы *.c в *.cpp, умная среда и компилятор автоматом поймут что от них хотят Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vvppvv 0 20 февраля Опубликовано 20 февраля · Жалоба 3 minutes ago, EdgeAligned said: Кстати, можно создать С/С++ проект с плюсомым компилятор ом, но писать в стиле Си, не используя инструментов ++ Я использую "//" в комментариях, а это, строго говоря, уже из плюсов. Но компилятор позволяет. :)) Вообще, конечно, всё зависит от задач, тут я полностью согласен. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться