IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> include || !include, c/c++
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 26
Пол: Мужской
Реальное имя: IVAN

Репутация: -  0  +


недавно начал изучать с++, столкнулся с такой интересной штукой
Код
//#include <stdio.h>

int main (void)
{
     puts("hello world!");
    
}

код выше спокойно компилируется компилятором С, а вот при компилировании на С++ вылазит ошибка: "identifier not found" может кто-нибудь объяснить почему так происходит?

Сообщение отредактировано: SkIv -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Цитата
может кто-нибудь объяснить почему так происходит?
Потому что в С++ (в отличие от чистого С) вызову функции должно обязательно предшествовать ее объявление или описания. Описание функции puts находится в файле stdio.h, поэтому если его при-include-ить к программе, то программа становится правильной с точки зрения С++, если нет - то программа некорректна, и компилироваться не будет.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 26
Пол: Мужской
Реальное имя: IVAN

Репутация: -  0  +


это я понимаю, я не понимаю как она в Си находит определение этой функции
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






А с чего ты взял, что в С нужно определение этой функции? Ты внимательно на предупреждения компилятора смотрел? Там же написано: warning: implicit declaration of function `puts' - "неявное объявление функции puts", то есть, функция объявлена неявно, теперь задача линкера найти реализацию этой функции в библиотеках, с чем, как видишь, он прекрасно справляется.

А вот чтобы избавиться от предупреждения, надо подключить stdio.h, чтобы компилятор смог убедиться, что такая функция существует в одной из библиотек. Вот это, скажем:
int main (void)
{
printf("result = %5.2f", mysin(3.14 / 4));
}
при компиляции в С выдает такое же предупреждение, как в первой программе, но при попытке слинковать программу, получаем ошибку линкера: он не нашел в стандартных библиотеках функции mysin.

А в С++ более серьезные проверки типов, и такие вещи ловятся еще на этапе компиляции.
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 19.05.2024 5:36
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name