Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
Dennis Ritchie
551 / 143 / 58
Регистрация: 27.07.2014
Сообщений: 2,446
1

Почему тип "bool" работает в файле с расширением .cpp и не работает в файле с расширением .c?

15.10.2014, 18:55. Просмотров 851. Ответов 11
Метки нет (Все метки)

Объясните, пожалуйста, почему тип "bool" в одной и той же программе работает в файле с расширением .cpp и не работает в файле с расширением.c?

Я понимаю, что в C не было типа "bool", но почему он работает в C++, ведь я использую ту же самую библиотеку "<stdio.h>". Я не понимаю, в C++ модифицирована библиотека "<stdio.h>", или это явление связано с компилятором?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
 
int main()
{
    int n = 0;
    scanf("%d", &n);
    bool A[n];
    
    for (int i = 2; i <= n; i++)
        A[i] = true;
    
    for (int i = 2; i * i <= n; ++i)
        if (A[i])
            for (int j = i * i; j <= n; j += i)
                A[j] = false;
                
    for (int i = 2; i <= n; ++i)
        if (A[i])
            printf("%d ", i);
    return 0;
}
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.10.2014, 18:55
Ответы с готовыми решениями:

В файле с расширением * .cpp, исключить из листинга все комментарии вида "//»
Помогите пожалуйста с заданием В файле с расширением * .cpp, содержащий текст программы на языке...

Ошибка "Тип "MyPoint" создан из нескольких разделенных классов в одном и том же файле." при открытии дизайнера
Добрый день, формучане. У меня возникла необходимость добавления моего класса в коллекцию, для...

Почему A ob() выдает ошибку: "выражение должно иметь тип класса", а A ob работает?
#include &lt;iostream&gt; using namespace std; class A { public: int a; A():a(0) {

Почему в Dev-C++ код не компилируется, если исходный код будет с расширением ".c"?
Почему в Dev-C++ код не компилируется, если исходный код будет с расширением &quot;.c&quot; , а с &quot;.cpp&quot;...

11
Kuzia domovenok
2998 / 2546 / 661
Регистрация: 25.03.2012
Сообщений: 9,106
Записей в блоге: 1
Завершенные тесты: 1
15.10.2014, 18:59 2
C++
1
2
3
4
5
6
7
//нет никакого <stdio.h>
// при чём тут <stdio.h> вообще?
int main(){
  bool question;
  question= (2+2==4);
  return 0;
}
Добавлено через 2 минуты
Это программа на С++.
В языке С++ есть встроенный тип bool
В Языке Си нету встроенного типа bool
О чём вопрос?
Встроенные типы не зависят от наличия заголовочных файлов (вроде<stdio.h> )
Они либо есть, либо нет.
компилятор С++ распознает в программе bool как название типа.
Для компилятора Си bool это неизвестный идентификатор.
0
Dennis Ritchie
551 / 143 / 58
Регистрация: 27.07.2014
Сообщений: 2,446
15.10.2014, 19:07  [ТС] 3
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
В языке С++ есть встроенный тип bool
А куда он встроен?
0
Tulosba
:)
Эксперт С++
4762 / 3256 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
15.10.2014, 19:08 4
Цитата Сообщение от Dennis Ritchie Посмотреть сообщение
А куда он встроен?
в язык.
Когда ты меняешь расширение файла с *.cpp на *.с студия в частности собирает его сишным, а не плюсовым компилятором. Отсюда и различия.
Насколько я помню, есть опция, которая такое поведение отключает.
0
Dennis Ritchie
551 / 143 / 58
Регистрация: 27.07.2014
Сообщений: 2,446
15.10.2014, 19:11  [ТС] 5
Цитата Сообщение от Tulosba Посмотреть сообщение
в язык
То есть все стандартные типы встроены в язык, а не в библиотеку?
0
alsav22
5465 / 4860 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
15.10.2014, 19:12 6
Цитата Сообщение от Dennis Ritchie Посмотреть сообщение
То есть все стандартные типы встроены в язык, а не в библиотеку?
Вот это:
Цитата Сообщение от Dennis Ritchie Посмотреть сообщение
<stdio.h>
не библиотека, а заголовочный файл.
0
Tulosba
:)
Эксперт С++
4762 / 3256 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
15.10.2014, 19:14 7
Цитата Сообщение от Dennis Ritchie Посмотреть сообщение
То есть все стандартные типы встроены в язык, а не в библиотеку?
да. для работы с фундаментальными типами (int,char,double и т.д) никаких "библиотек" подключать не надо.
1
Dennis Ritchie
551 / 143 / 58
Регистрация: 27.07.2014
Сообщений: 2,446
15.10.2014, 19:15  [ТС] 8
Цитата Сообщение от alsav22 Посмотреть сообщение
не библиотека, а заголовочный файл.
Хорошо, а "<cstdio>" - это библиотека?

Уже нашёл ответ на свой вопрос. А что тогда является библиотекой в C++?
0
0x10
2852 / 1936 / 327
Регистрация: 24.11.2012
Сообщений: 4,743
15.10.2014, 19:31 9
Цитата Сообщение от Dennis Ritchie Посмотреть сообщение
А что тогда является библиотекой в C++?
Библиотека (программирование)
1
alsav22
5465 / 4860 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
15.10.2014, 19:38 10
Цитата Сообщение от Dennis Ritchie Посмотреть сообщение
А что тогда является библиотекой в C++?
Google в помощь.
1
Kuzia domovenok
2998 / 2546 / 661
Регистрация: 25.03.2012
Сообщений: 9,106
Записей в блоге: 1
Завершенные тесты: 1
15.10.2014, 19:59 11
Dennis Ritchie, я тебе показал пример, программы с bool.
Она не требует никаких заголовочных файлов (и тем более библиотек). Тебе повторить?
C++
1
2
3
4
5
6
7
//нет никакого <stdio.h>
// при чём тут <stdio.h> вообще?
int main(){
  bool question;
  question= (2+2==4);
  return 0;
}
Компилятор - это программа, которая преобразует текст программы в бинарный код (объектный файл).
Встроенные в язык средства он реализует сразу.
Грубо говоря, у компилятора в спамой программе компилятора разработчиками где-то написано
C++
1
2
3
4
fscanf(cppfile, "%s", nextword);
if (strcmp(nextword, "for")){/*написать в объектный файл машинных кодов для цикла*/}
if (strcmp(nextword, "if")){/*написать в объектный файл машинных кодов для ветвления*/}
if (strcmp(nextword, "bool")){/*написать в объектный файл машинных кодов для создания логической переменной*/}
каким бы сложным язык Си ни казался, таких ключевых слов в нём крайне немного.
Вот они! всего 32 штуки! http://msdn.microsoft.com/en-us/library/befeaky0.aspx
Как видишь слова bool среди них нет.
А вот ключевые слова плюсов http://msdn.microsoft.com/en-us/library/2e6a4at9.aspx
1
Dennis Ritchie
551 / 143 / 58
Регистрация: 27.07.2014
Сообщений: 2,446
15.10.2014, 20:16  [ТС] 12
Большое всем спасибо.
0
15.10.2014, 20:16
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.10.2014, 20:16

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

"Присоединение" вместо "отладки" при открытии файла с расширением .c
1. При открытии файлов не появляется кнопка запуска отладки, вместо неё &quot;присоединение&quot;, как...

Не выполняются команды с расширением ".msc" из списка "Запуск программы"
При попытке произвести дефрагментацию диска или посмотреть &quot;свойства системы-оборудование-диспетчер...

Как исправить эту ошибку: Не удается неявно преобразовать тип "double" в "bool"
Как исправить эту ошибку: Не удается неявно преобразовать тип &quot;double&quot; в &quot;bool&quot;. class...

Не удается неявно преобразовать тип "int" в "bool"
помогите пожалуйста исправить ошибку Не удается неявно преобразовать тип &quot;int&quot; в &quot;bool&quot; 282 и 319...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.