|
0 / 0 / 0
Регистрация: 09.06.2019
Сообщений: 5
|
||||||
Почему это работает?09.06.2019, 17:08. Показов 1956. Ответов 10
Метки приведение типов (Все метки)
Доброго времени суток. Написал следующую штуку
f 252885984 Мусор, что логично, хотя f все же является первыми младшими битами представления 5.7, но это такое. 252885984 это что-то рядом стоящее, как я понимаю. Не могли бы вы объяснить, почему вообще это работает? Я так понимаю, это из-за static_cast, потому что он не делает проверок возможности приведения, но что происходит внутри всего этого? Премного благодарю за внимание
0
|
||||||
| 09.06.2019, 17:08 | |
|
Ответы с готовыми решениями:
10
Почему это не работает? C++ Почему это не работает? почему это так работает |
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||||||
| 09.06.2019, 17:12 | |||||||
0
|
|||||||
|
0 / 0 / 0
Регистрация: 09.06.2019
Сообщений: 5
|
|
| 09.06.2019, 17:23 [ТС] | |
|
Может, из-за разницы стандартов?
0
|
|
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
|||||||
| 09.06.2019, 17:31 | |||||||
Наверное в студии тестите. Проверьте на gcc на том же стандарте
1
|
|||||||
|
0 / 0 / 0
Регистрация: 09.06.2019
Сообщений: 5
|
|
| 09.06.2019, 17:34 [ТС] | |
|
Я не делал указатель на фнкц. Я проверял поведение приведения типов с общим указателем (void*), а вы только что описали вполне конкретный тип поля void (char). У меня мой вариант работает
0
|
|
|
0 / 0 / 0
Регистрация: 09.06.2019
Сообщений: 5
|
|
| 09.06.2019, 17:36 [ТС] | |
|
Да, через студию, сейчас попробую
0
|
|
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
|
| 09.06.2019, 17:39 | |
|
Litas99,
Ошибка возникает еще на стадии присвоения ptr адреса функции foo и это нормально. Судя по всему это просто расширение или баг в студии. Зачем может быть нужно описать функцию по одному типу а потом кастить ее к другому типу? Конкретно в вашем случае судя по всему - что бы получить UB
1
|
|
|
Неэпический
|
|
| 09.06.2019, 19:33 | |
|
1
|
|
|
|
||
| 10.06.2019, 10:18 | ||
Сообщение было отмечено Litas99 как решение
Решение
Если я правильно понял смысл вопроса
Тут обсуждение ушло в тему преобразования указателей, но ТС'а, судя по всему, интересовало совсем не это. Чтобы не мучаться с этим вопросом и выяснением тонкостей стандартов, проще переписать программу на Си в виде двух модулей. Или на Си++, но завернуть функцию foo в extern "C", чтобы не спотыкаться о манглирование имён. При таком раскладе мы попросту откинем из рассмотрения геморрой с преобразованием указателей и оставим только тот код, который подсвечивает суть изначального вопроса C /* Файл t1.c */ #include <stdio.h> void foo (char r) { printf ("foo: %c\n", r); } C /* Файл t2.c */ #include <stdio.h> extern int foo (float); int main (void) { printf ("main: %d\n", foo (5.7)); return 0; } Code $ gcc t1.c t2.c
$ ./a.exe
foo: f
main: 7
1
|
||
|
0 / 0 / 0
Регистрация: 09.06.2019
Сообщений: 5
|
|
| 13.06.2019, 01:29 [ТС] | |
|
Evg, именно это я и хотел узнать. Спасибо)
0
|
|
|
Вездепух
12936 / 6803 / 1821
Регистрация: 18.10.2014
Сообщений: 17,214
|
||
| 13.06.2019, 02:23 | ||
|
0
|
||
| 13.06.2019, 02:23 | |
|
Помогаю со студенческими работами здесь
11
[c++] fgets не могу понять почему это не работает Почему функция не работает с чарами? Это из-за недостатка памяти?
Русификация.Работает-супер! Обьяснитте, как это работает? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога
Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
|
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога
Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
|
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования.
Часть библиотеки BedvitCOM
Использованы. . .
|
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога
SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
|