Здесь я написал свое имя в объявлении основного аргумента, но эта программа все равно работает и не выдает никаких предупреждений.
#include <stdio.h>
int main(Mr32)
{
printf("why this works?");
return 0;
}
Всякий раз, когда я пишу что-нибудь вместо mr32, код все еще работает. Я действительно не знаю, почему это происходит. Согласно стандарту программирования C, это неправильно, верно?
Редактировать: я попробовал -Wall, но он не выдает никаких предупреждений.
Я думаю, что здесь должна быть ошибка, потому что я не делаю стандартное объявление определения функции C
В языке c каждое определение функции должно соответствовать этому формату
return-type function_name ( arg_type arg1, ..., arg_type argN );
Это также должно применяться к main() справа ..??
Хорошо — Wextra показывает предупреждение о том, что mr32 по умолчанию — int.
Тогда почему по умолчанию любой аргумент в main() имеет тип int?
#include <stdio.h>
gcc не жалуется даже с-Wall
. Только с-Wextra
он жалуется наMr32
по умолчанию наint
. Вопрос больше касается основных аргументов по умолчанию: какая спецификация определяет, что тип основных по умолчанию равен int? - person Matteo   schedule 27.09.2011gcc -Wextra
жалуется. Но вопрос: почему предупреждение, а не ошибка? Почему по умолчанию используетсяint
? Где и как это указано? - person Matteo   schedule 27.09.2011gcc -std=c89 -pedantic -Wall -Wmissing-parameter-type -Wold-style-definition
. 1-е предупреждение включено в-Wextra
; 2-й изолирован. - person pmg   schedule 27.09.2011identifier-list
вместоparameter-type-list
. Я не уверен, что стандарт явно указывает в нормативном тексте, что параметры тогда предполагаются равнымиint
, или это просто следует из того факта, что любая переменная в C89 по умолчанию является int (то естьauto a;
определяет автоматическую переменную это int), но в 3.7.1 есть пример, в котором упоминается, чтоint
используется по умолчанию для таких параметров функции. - person Steve Jessop   schedule 27.09.2011