![]() |
1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
![]() ![]() |
![]() |
SkIv |
![]()
Сообщение
#1
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 26 Пол: Мужской Реальное имя: IVAN Репутация: ![]() ![]() ![]() |
недавно начал изучать с++, столкнулся с такой интересной штукой
Код //#include <stdio.h> int main (void) { puts("hello world!"); } код выше спокойно компилируется компилятором С, а вот при компилировании на С++ вылазит ошибка: "identifier not found" может кто-нибудь объяснить почему так происходит? Сообщение отредактировано: SkIv - 9.03.2009 16:07 |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Цитата может кто-нибудь объяснить почему так происходит? Потому что в С++ (в отличие от чистого С) вызову функции должно обязательно предшествовать ее объявление или описания. Описание функции puts находится в файле stdio.h, поэтому если его при-include-ить к программе, то программа становится правильной с точки зрения С++, если нет - то программа некорректна, и компилироваться не будет. |
SkIv |
![]()
Сообщение
#3
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 26 Пол: Мужской Реальное имя: IVAN Репутация: ![]() ![]() ![]() |
это я понимаю, я не понимаю как она в Си находит определение этой функции
|
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
А с чего ты взял, что в С нужно определение этой функции? Ты внимательно на предупреждения компилятора смотрел? Там же написано: warning: implicit declaration of function `puts' - "неявное объявление функции puts", то есть, функция объявлена неявно, теперь задача линкера найти реализацию этой функции в библиотеках, с чем, как видишь, он прекрасно справляется.
А вот чтобы избавиться от предупреждения, надо подключить stdio.h, чтобы компилятор смог убедиться, что такая функция существует в одной из библиотек. Вот это, скажем: int main (void)при компиляции в С выдает такое же предупреждение, как в первой программе, но при попытке слинковать программу, получаем ошибку линкера: он не нашел в стандартных библиотеках функции mysin. А в С++ более серьезные проверки типов, и такие вещи ловятся еще на этапе компиляции. |
![]() ![]() |
![]() |
Текстовая версия | 29.07.2025 11:32 |