Форум программистов, компьютерный форум CyberForum.ru

Можно ли заменить обращение к Union без указания типа переменной? - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Нужно разобраться с средой разработкой для C++ http://www.cyberforum.ru/cpp/thread1113231.html
Привет Всем ! Если я не ошибаюсь то с .NET 2003 (VS 7.1) шапки языка C++ немного изменился, и разница была следующая: 1. до: #include <iostream.h> void main(void) ...... и т.д... 2. после: #include <iostream>
C++ Libxl.h как подключить? Помогите подключить библиотеку к Visual C++ 2012 Или даже так - помогите разобраться с тем как парсить с xls файлов. http://www.cyberforum.ru/cpp/thread1111407.html
Ошибка с распределением цикла по потокам в Open MP C++
нужно цикл for разделить м/у потоками,но почему то ошибки выдает ,первый раз с Open MP работаю,подскажите как исправить ,пожалуйста... пишу на VS 2010 Ultimate ошибки:Ошибка 4 error C3004: shared: предложение не допускается в директиве OpenMP "for" Ошибка 5 error C3017: неверный вид проверки завершения в операторе For директивы OpenMP #pragma omp parallel { #pragma omp for...
Надзиратель томагавков или что за велосипед я изобрел? C++
She's alive! Господа, в общем вдохновился я темой programina про статические поля класса и решил создать что-то похожее на сборщик мусора. По скольку я придерживаюсь мнения, что порою лучше сперва самому поковыряться, а потом уже почитать как правильно надо было сделать, то вот такой у меня получился уродец. Долго думал куда можно его применить в качестве примера. Придумал - класс-томагавк....
C++ Получение из файла формата wav массива значений http://www.cyberforum.ru/cpp/thread1108824.html
Столкнулся со следующей задачей, требуется получить из wav файла массив значений. Сам владею Си на примитивном уровне, по этой причине решить данную задачу самостоятельно не могу, поиск в гугле ничего не дал (или просто я не увидел решения). Надеюсь на вашу помощь.
C++ Run exe from memory (x64) Есть необходимость запускать exe из памяти, а не с диска. Может кто сталкивался с данным проектом? Сам находил много проектов, но они были Win32 и не работали под сборкой x64. А мне нужен именно x64, так как это проект будет использоваться в связки с другими 64-битными проектами. подробнее

Показать сообщение отдельно
ValeryS
Модератор
6541 / 5007 / 461
Регистрация: 14.02.2011
Сообщений: 16,653
07.03.2014, 22:58     Можно ли заменить обращение к Union без указания типа переменной?
Цитата Сообщение от Aloir Посмотреть сообщение
union остался нам со старых времен, когда люди были ограничены в памяти, сейчас с памятью проблем особо нету.. очень редко где его реально нужно применять. Лучше оградить себя от использования его, т.к это достаточно опасная штука, надо постоянно помнить что находится в этом кусочке памяти иначе может быть очень плохо..
что за глупость
Цитата Сообщение от Aloir Посмотреть сообщение
Лучше используйте структуры. имхо.
ты считаешь что это одно и тоже?
что у них общего кроме внешнего вида ?
union придуман для разного представления одних и тех же данных
например
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
struct MyPacet
{
short ID_Minor;
short ID_Major;
int size;
int data;
}
 
union uMyData
{
MyPacet pacet_str;
int ID;
unsigned char buf[sizeof(MyPacet)];
 
}
теперь я могу загнать сюда пакет байтов, например с компорта, а считать их в виде структуры

или еще пример
написать все байты входящие в int

C++
1
2
3
4
5
6
7
8
9
10
union un_int
{
int a;
unsigned char buf[4];
}
 
un_int u1;
 
u1.a=12345;
printf(" %x %x %x %x",u1.buf[0],u1.buf[1],u1.buf[2],u1.buf[3]);
Цитата Сообщение от Izual Посмотреть сообщение
Можно ли заменить обращение к Union без указания типа переменной?(т.е. без .i .f .str, а просто к "data")
нет не можешь, это как к структуре обращаться только по имени, программа должна знать в каком виде тебе предоставить данные
Цитата Сообщение от Izual Посмотреть сообщение
Или есть под мои нужды альтернатива?
а вчем нужда то?
сдается мне тебе не union нужен

Добавлено через 5 минут
Цитата Сообщение от Izual Посмотреть сообщение
Ещё кстати один вопрос возник, связанный с union, его же можно использовать как конвертатор типа(как функцию itoa например). Мне вот нужно прочесть строку символов, которая должна интерпритироваться в DWORD тип.
нет нельзя
union ничего не конвертирует он просто представит в другом виде

например
C++
1
2
3
4
5
union u1
{
char str[4];
int i;
}
как то записали в str "123"
в памяти будут лежать вот такие данные 0х31 0х32 0х33 0х00
соответственно int их интерпретирует как 0х00333231 =3355185 это не то что хотелось бы получить

Добавлено через 2 минуты
Цитата Сообщение от Izual Посмотреть сообщение
Вот интересно, если я в файле напишу "WS_VISIBLE", и из union переменной вытащю 16-ричное значение типа DWORD, то прокатит ли...
WS_VISIBLE это макрос который имеет вполне конкретное значение
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru