Есть ли способ распечатать тип переменной / указатель в C? - PullRequest
24 голосов
/ 29 января 2010

Я хочу распечатать (или установить иным образом) тип некоторой переменной в моей программе. Есть ли хороший способ сделать это? Под «хорошим» я подразумеваю способ, который работает, даже если это означает намеренно генерировать ошибки компилятора.

Например:

client.c:55: error: incompatible types in assignment

это ошибка, которую я получаю прямо сейчас. Что я хочу, это сказать мне что-то вроде:

client.c:55: error: attempting to assign type struct a to type struct b

или функция, которую я могу использовать следующим образом:

printf(gettype(x));

который будет выводить:

struct b

Ответы [ 4 ]

52 голосов
/ 09 декабря 2011

Я только что обнаружил, как это сделать.

printf("%d", variable);

Если переменная не является целым числом, то gcc -Wall будет жаловаться, что типы не совпадают - и выведет тип переменной, который именно то, что вы ищете.

3 голосов
/ 29 января 2010

попробуйте отладку с помощью GDB, он напечатает все свойства, связанные с переменной, включая ее тип. Но ваша программа должна скомпилироваться перед использованием GDB.

1 голос
/ 29 января 2010

В C вы предоставляете тип, когда объявляете переменную. Это единственная информация, которая имеется у компилятора, когда он жалуется на присвоение (то есть он будет использовать не тип времени выполнения объекта, а ваш статический тип).

Перейдите к коду, найдите строку 55, проверьте, какие есть переменные, и найдите типы в коде. В C нет даже перегрузок, типы статичны и просты, как в любом языке.

1 голос
/ 29 января 2010

Если вы используете gcc или gcc-совместимый компилятор, вы можете использовать ключевое слово typeof (очевидно, нестандартное и непереносимое), которое очень похоже на sizeof.

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