тип структуры и имя переменной - PullRequest
3 голосов
/ 11 ноября 2010

привет всем я просто хотел узнать, можем ли мы объявить имя переменной как имя структуры.

например

typedef struct
{
  char c;
}t;

тогда в какой-то функции я могу использовать

fun()
{
  t t;
}

это действительно? если так, то как компилятор различает их?

Ответы [ 5 ]

3 голосов
/ 11 ноября 2010

Да, но зачем вам это? Если вы хотите, чтобы ошибки и ошибки процветали в вашем проекте, тогда идите вперед и назовите переменные после типов.

3 голосов
/ 11 ноября 2010

Да, это действительно. Если вы это сделаете, то тип структуры будет скрыт в пределах объема, и t относится только к объявленной переменной.

1 голос
/ 11 ноября 2010

fun() { t t; }

это действительно?

Нет, это не так.Тип возврата fun() отсутствует, а неявный int тип возврата устарел.

Однако void fun(){ t t ;} синтаксически допустим.

0 голосов
/ 11 ноября 2010

анализатор сначала получает тип данных и поддерживает другую таблицу, а затем часть в качестве имени переменной. Так что работает абсолютно.

0 голосов
/ 11 ноября 2010

да, потому что каждая вещь живет в другом месте в понимании компиляторов.

t t;

Компилятор ожидает тип, когда он встречает первый t и имеет тип с именем t.

Редактировать: Для адресации комментариев.

Я не говорю о сфере.

Но так как я не написал компилятор (только интерпретаторы), я не знаю этот термин. Компилятор ожидает, что токен при первом t будет типом, он также знает, какой тип был объявлен до этого момента. Так как он видит имя, которое относится к типу, он счастлив. Принимая во внимание, что если бы там был найден токен, который не был типом, то это правильно сообщило бы об ошибке.

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