недавно начал изучать с++, столкнулся с такой интересной штукой
Код
//#include <stdio.h>
int main (void) { puts("hello world!");
}
код выше спокойно компилируется компилятором С, а вот при компилировании на С++ вылазит ошибка: "identifier not found" может кто-нибудь объяснить почему так происходит?
volvo
9.03.2009 21:49
Цитата
может кто-нибудь объяснить почему так происходит?
Потому что в С++ (в отличие от чистого С) вызову функции должно обязательно предшествовать ее объявление или описания. Описание функции puts находится в файле stdio.h, поэтому если его при-include-ить к программе, то программа становится правильной с точки зрения С++, если нет - то программа некорректна, и компилироваться не будет.
SkIv
10.03.2009 1:00
это я понимаю, я не понимаю как она в Си находит определение этой функции
volvo
10.03.2009 1:23
А с чего ты взял, что в С нужно определение этой функции? Ты внимательно на предупреждения компилятора смотрел? Там же написано: warning: implicit declaration of function `puts' - "неявное объявление функции puts", то есть, функция объявлена неявно, теперь задача линкера найти реализацию этой функции в библиотеках, с чем, как видишь, он прекрасно справляется.
А вот чтобы избавиться от предупреждения, надо подключить stdio.h, чтобы компилятор смог убедиться, что такая функция существует в одной из библиотек. Вот это, скажем:
int main (void) { printf("result = %5.2f", mysin(3.14 / 4)); }
при компиляции в С выдает такое же предупреждение, как в первой программе, но при попытке слинковать программу, получаем ошибку линкера: он не нашел в стандартных библиотеках функции mysin.
А в С++ более серьезные проверки типов, и такие вещи ловятся еще на этапе компиляции.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.