DRUID3 0 25 мая, 2008 Опубликовано 25 мая, 2008 · Жалоба Мало сплю последнее время и тупею потому :( . Итак есть тип заданный typedef . Как проверить его соответствует он int или float (третьего не дано) - от этого будут зависеть остальные действия... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 33 25 мая, 2008 Опубликовано 25 мая, 2008 · Жалоба Мало сплю последнее время и тупею потому :( . Итак есть тип заданный typedef . Как проверить его соответствует он int или float (третьего не дано) - от этого будут зависеть остальные действия... Что значит проверить? Чему задано, тому и соответствует. Типизация-то статическая. Или пример приведите, где этот вопрос возникает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DpInRock 0 25 мая, 2008 Опубликовано 25 мая, 2008 · Жалоба Sizeof() Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
okorok 0 25 мая, 2008 Опубликовано 25 мая, 2008 · Жалоба Мало сплю последнее время и тупею потому :( . Итак есть тип заданный typedef . Как проверить его соответствует он int или float (третьего не дано) - от этого будут зависеть остальные действия...Я бы рядом с typedef завел константу, например "#define TYPEFLOAT 0" и проверял ее значение. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SSerge 4 25 мая, 2008 Опубликовано 25 мая, 2008 · Жалоба Средствами препроцессора, похоже, никак - мне таких не известно. На этапе компиляции можно попробовать воспользоваться фичами С++, а именно перегрузкой функций. т.е. определить две функции, например: int f( int x ); и float f( float x ); и в этих функциях реализовать разные варианты в зависимости от типа. Компилятор разберётся какую из них вызвать, а линкер выбросит лишнее. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 33 25 мая, 2008 Опубликовано 25 мая, 2008 · Жалоба Sizeof() И? #include <stdio.h> int main() { printf("\nSizeof int = %d", sizeof(int)); printf("\nSizeof float = %d", sizeof(float)); return 0; } вывод: Sizeof int = 4 Sizeof float = 4 Это РС. На многих 32-разрядных платформах (ARM7, Blackfin и т.д.) будет ровно то же самое. Средствами препроцессора, похоже, никак - мне таких не известно. На этапе компиляции можно попробовать воспользоваться фичами С++, а именно перегрузкой функций. Вроде, про функции речи вообще не было. Если надо статически разрешать вопрос, то для этого есть все средства - контроль типов. Если все же на рантайме, то в ++ есть такая фишка - RTTI. Но что-то мне подсказывает, что тут не тот случай. :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alex B._ 0 25 мая, 2008 Опубликовано 25 мая, 2008 · Жалоба если это gcc, то можно использовать typeof() Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GetSmart 0 25 мая, 2008 Опубликовано 25 мая, 2008 (изменено) · Жалоба typedef float real; const float tmp = 1.0/3; // любое число, только не 0 :) if (*(real *)&tmp == tmp) { asm("NOP"); } У меня такой код в случае несоответствия типа вообще выбрасывается. Браво компилятору (IAR). В случае совпадения типов остаётся только ядро IFa без сравнения. Или так: typedef int real; #define RealIsFloat ((real)0.5f == 0.5f) if (RealIsFloat) { // если плавающая арифметика } else { // если целочисленная арифметика } Изменено 25 мая, 2008 пользователем GetSmart Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nitrotoluol 0 25 мая, 2008 Опубликовано 25 мая, 2008 · Жалоба Оператор typeid возвращает ссылку на структуру type_info, которая содержит поля, позволяющие получить информацию о типе: http://msdn.microsoft.com/en-us/library/fyf39xec.aspx Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GetSmart 0 25 мая, 2008 Опубликовано 25 мая, 2008 · Жалоба typedef float real; const double tmp = 1.0/3; if (*(real *)&tmp == tmp) { asm("NOP"); } else { asm("NOP"); asm("NOP"); } Не поверите :) В IAR-e выполняются сразу оба варианта внутри IFa. Когда же в typedef стоит int, то всё нормально. IAR 4.20 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 26 мая, 2008 Опубликовано 26 мая, 2008 · Жалоба Мало сплю последнее время и тупею потому :( . Итак есть тип заданный typedef . Как проверить его соответствует он int или float (третьего не дано) - от этого будут зависеть остальные действия... Какой язык (С/С++) и что подразумевается под 'остальными действиями'? Если С++ то можно воспользоваться шаблонным классом и его специализациями для int/float/etc Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sergeeff 1 26 мая, 2008 Опубликовано 26 мая, 2008 · Жалоба В книге А.Александреску "Современное проектирование на С++" этим вопросам уделено довольно много внимания. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться