Я новичок в программировании. Мой учитель скомпилировал программу вообще без какой-либо директивы препроцессора, и она выполнила и отобразила результат. Это была просто программа "Привет, мир". Меня смущает то, что без директив он мог выполнять функцию «printf».
Программа компилируется и запускается без файлов заголовков turbo c ++
Ответы (1)
В «классическом» ANSI C (C89 / 90) вы можете вызывать невариадные функции без их предварительного объявления, если вы внимательно относитесь к предоставлению аргументов правильного типа. Итак, если все сделать правильно, можно написать формально действующую программу C89 / 90, не включающую никаких стандартных заголовков. Например.
int main()
{
puts("Hello World");
return 0;
}
В современном C это было бы невозможно, поскольку, начиная с C99, все функции должны быть объявлены перед вызовом.
Теперь вызов printf
без предварительного объявления этого (с прототипом) вызывал неопределенное поведение даже в C89 / 90, поскольку printf
является вариативной функцией. Итак, если ваш учитель сделал что-то подобное
int main()
{
printf("Hello World\n");
return 0;
}
тогда ему / ей еще многое предстоит узнать о C. Эта программа C89 / 90 недействительна, даже если она скомпилировала, выполнила и отобразила вывод, который вам "понравился".
Однако вы все равно можете предварительно объявить функцию вручную.
int printf(const char *format, ...);
int main()
{
printf("Hello World\n");
return 0;
}
и в итоге получится действующая программа C89 / 90, которая не использует никаких директив предварительной обработки. Однако делать это таким образом - не лучшая практика программирования.
printf
? Итак, учитель на самом деле использовалprintf
. - person AnT   schedule 28.07.2017