C Загадка - играют с типами

find . -name '*.ear' -exec ls -lh {} \;

просто h дополнительное от ответа jer.drab.org. экономит время, преобразовывая в МБ мысленно;)

9
задан Ganesh Gopalasubramanian 13 November 2009 в 09:40
поделиться

2 ответа

Все может быть немного яснее, если мы немного переформатируем код:

struct st { int a; } fn() 
{
  struct st obj;
  obj.a = 10;
  return obj;
}
int main()
{
  struct st obj = fn();
  printf("%d\n", obj.a);
  return 0;
}

Таким образом, Тип возврата fn () - struct st {int a;} . После определения структуры нет точки с запятой, так как тип структуры является частью определения функции (проследите грамматику из единицы перевода -> объявление верхнего уровня -> определение функции ). Тип структуры доступен для main () , потому что вы помещаете в него тег структуры (st). Если бы вы написали

struct { int a; } fn() {...}

, то этот тип был бы недоступен для main () ; вам пришлось бы создать новый тип структуры с тем же определением.

Вы получите такой же эффект, как если бы вы написали

struct st {
  int a; 
};

struct st fn() 
{ 
  /* same as before */
}

int main()
{
  /* same as before */
}
5
ответ дан 4 December 2019 в 14:29
поделиться
  1. Результатом будет 10.
  2. Точка с запятой не нужна, потому что все это определение функции.
  3. Тег структуры st равен объявлен в глобальной области видимости и поэтому виден для main.
9
ответ дан 4 December 2019 в 14:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: