Могу ли я получить тип данных из переменной в C? - PullRequest
6 голосов
/ 26 февраля 2011

Есть способ получить тип данных в C?

Например:

int foo;

if (foo is int)
{
    // do something
}

или что-то вроде:

if (typeof(foo) == typeof(int))
{
    // do something
}

Заранее спасибо.

Ответы [ 5 ]

12 голосов
/ 26 февраля 2011

Это называется самоанализом типа или отражением и не поддерживается языком Си.Вам, вероятно, придется написать свою собственную библиотеку отражений, и это потребует значительных усилий.

3 голосов
/ 26 февраля 2011

В GCC есть расширение typeof, но оно не в ANSI C: http://tigcc.ticalc.org/doc/gnuexts.html#SEC69

2 голосов
/ 26 февраля 2011

Тот факт, что foo является int, связан с именем foo.Это никогда не может измениться.Какое значение будет иметь такой тест?Единственный случай, когда он вообще может быть полезен, это макросы, где foo может расширяться до переменных или выражений другого типа.В этом случае вы могли бы взглянуть на некоторые из моих прошлых вопросов, связанных с этой темой:

Типовое программирование с макросами: приемы определения типа?

Определение наличия прототипа с правильным типом возврата

0 голосов
/ 01 апреля 2019

Начиная с C11, вы можете сделать это с _Generic:

if (_Generic(foo, int: 1, default: 0)) // if(typeof(foo)==int)
{
    // do something
}
0 голосов
/ 27 февраля 2011

Единственный раз, когда вы не знаете тип, это если тип foo определяется typedef - если это так, ваш пример должен это отражать. А зачем вам что-то зависеть от типа? Может быть, есть способ решить вашу реальную проблему, но вы еще не представили свою реальную проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...