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