«Спецификатор типа и размера» - Терминология - PullRequest
2 голосов
/ 23 февраля 2010

Возьмите следующий фрагмент:

 1  #include <stdio.h>
 2  #include <stdlib.h>
 3  int foo(char [6]);
 4
 5  int main(void) {
 6          char* bar="hello";
 7          return foo(bar);
 8  }
 9
10  int foo(char f[6]) {
11          return EXIT_SUCCESS;
12  }
13

Какой технический термин подходит для «char [6]» в строке 3? Я называю это «спецификатором типа и размера», который просто описывает, для чего он используется компилятором.

Всю строку 3 я использую для вызова «сигнатуры стека вызовов функции» или просто «сигнатуры функции». «объявление функции» или «прототип функции» также будет правильным, в отличие от «реализации функции».

Примечание: вам не нужно объяснять мне все о стеках вызовов, фреймах, соглашениях о вызовах и т.д. и др. Я только ищу правильную терминологию там. НЕ всю строку 3, только как вызвать один единственный спецификатор, такой как "char [6]".

Ответы [ 2 ]

4 голосов
/ 23 февраля 2010

В стандарте C (ISO 9899: 1999) это спецификатор типа параметра , и, если в этом спецификаторе нет идентификатора, параметр называется без имени .

Любое понятие "размер" является частью типа (тип массива с неизвестным размером называется неполным ). Обратите внимание, что здесь конструкция [6] определяет не тип массива, а тип указателя (объявления массивов верхнего уровня в списках параметров автоматически преобразуются в объявления указателей, а предполагаемый размер массива игнорируется).

1 голос
/ 23 февраля 2010

В грамматике C, char [6] в строке 3 - это parameter-type-list, состоящий из одного parameter-list, который состоит из одного parameter-declaration.

То, что parameter-declaration состоит из declaration-specifier (char) и abstract-declarator ([6]).

...