Что происходит, когда мы не указываем тип данных аргументов в функции и передаем ей параметры во время вызова? - PullRequest
2 голосов
/ 22 июня 2009

Посмотрите на следующую программу.

int main()
{
    char a=65, ch ='c';
    printit(a,ch);
}

printit(a,ch)
{
    printf("a=%d   ch=%c",a,ch);
}

Даже если тип данных аргументов не указан в функции 'printit ()', результат отображается в printf. Я вижу правильный ответ, когда я компилирую его с помощью gcc и запускаю его. Почему? Не обязательно ли указывать тип данных аргументов в C? Какой тип данных по умолчанию для аргумента используется в показанном выше случае?

Ответы [ 2 ]

3 голосов
/ 22 июня 2009

Единственный тип данных по умолчанию, принятый в C, это int, как в коде выше.

Новые версии C ++ запрещают неявную типизацию данных, а новые компиляторы C ++ отказываются компилировать приведенный выше код.

1 голос
/ 22 июня 2009

Поскольку вы не указываете прототип для printit(), компилятор составляет неявное объявление:

int printit(int, int);

Когда более поздний компилятор видит определение функции printit() без типов для аргументов, он использует это неявное объявление.

Это очень опасный метод - вы в основном запрещаете проверку типов для этой функции.

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