Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.92/120: Рейтинг темы: голосов - 120, средняя оценка - 4.92
0 / 0 / 0
Регистрация: 07.09.2019
Сообщений: 18
1

Использование stdafx.h

07.09.2019, 09:39. Показов 24340. Ответов 33

Добрый день (вечер). Я учусь на первом курсе. Мы начали изучать Си, а потому нам дали учебник по этому языку, а также сказали скачать Visual Studio 2010. Скачав его и немного на нем поработав, я понял, что запутался. По ряду причин (которые я сейчас назову) я перестал понимать на каком из языков (Си или C++) я пишу.
Первая причина: директива #include <stdio.h>. В учебнике по Си именно она используется для объявления стандартных ввода-вывода. Однако в Visual Studio на место неё встает #include "stdafx.h", которая, к слову, и вызывает stdio.h. Но если не использовать #include "stdafx.h", просто написать как в учебнике (#include <stdio.h>), то компилятор начинает ругаться. Например, вот эта программа
C++
1
2
3
4
5
6
7
8
9
10
#include <stdio.h>
  int main()
  {
      int a,b,sum; /* Описание трех целых переменных a,b,sum */
      printf("\nВведите два целых числа: "); /* Вывод сообщения об ожидаемом вводе */
      scanf("%d %d",&a,&b); /* Ввод значений переменных a,b */
      um=a+b; /* Оператор присваивания: сложить a и b; результат - в sum */
      printf("a+b=%d\n",sum); /* Вывод результата - значения переменной sum */
      return 0;
  }
попросту не работает в VS и работает в онлайн компиляторе Си.
Вторая причина: Большинство операторов и синтаксических конструкций являются командами языка Си, а не C++(например printf() и scanf() вместо cin и cout, а также %d)
По этим и некоторым другим причинам(например, формат файлов .cpp, что указывает на C++) я и запутался языках. Помогите, разъясните.
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.09.2019, 09:39
Ответы с готовыми решениями:

stdafx.h и StdAfx.h
Добавил в свое решение проект (win32, lib). Добавил класс. У меня создался cpp-файл каркас с...

файлы stdafx
Здравствуйте, форумчане! Подскажите, пожалуйста, зачем нужны файлы stdafx? почему в начале...

Подключение stdafx.h
Здравствуйте! Помогите , пожалуйста, разобраться с проблемой! Без подключения библиотеки...

iostream, StdAfx.h
Начал изучать С++ попытался набрать первый листинг и посмотреть программу в работе и тут же...

33
Azazel-San
07.09.2019, 18:05     Использование stdafx.h
  #21

Не по теме:

Цитата Сообщение от _stanislav Посмотреть сообщение
а мое интересно?
Ну, давай)
Я чисто уточнить хотел)

0
"C with Classes"
1485 / 1287 / 485
Регистрация: 16.08.2014
Сообщений: 5,414
Записей в блоге: 1
07.09.2019, 18:17 22

Не по теме:

Цитата Сообщение от Azazel-San Посмотреть сообщение
Ну, давай)
мое такое же какое TheCalligrapher дал (да и ты вроде как того же мнения), есть параллель где две волнистые линии языка С и С++ пересекаются. но это разные языки и С++ не поддерживает все возможности языка С, на пересечении этих линий как раз можно использовать эти два языка вмести, это можно считать интерфейсом меж языкового взаимодействия

0
Эксперт С++
8402 / 4078 / 891
Регистрация: 15.11.2014
Сообщений: 9,168
07.09.2019, 18:17 23
Цитата Сообщение от Байт Посмотреть сообщение
Имхо, это разница не языков, а трансляторов. Ваш - умненький, эту грубую ошибку ловит, мой - дурачок, пропустил.
на самом деле было бы странно,
если твой не оч умный транслятор скомпилировал такой код.
я подозреваю, что ты сам просто что-то путаешь.

в отличие от языка си, где такой косяк - норма жизни,
язык с++ явным образом запрещает конструкцию,
с очевидным выходом за пределы диапазона массива.

что мы и наблюдаем на практике:

студия:
Код
error C2117: 's': array bounds overflow
шланг:
Код
source_file.cpp:4:17: error: initializer-string for char array is too long
    char s[3] = "abc";
                ^~~~~
показания жосиси ты видел выше.

но если все топовые компиляторы отказываются компилировать
эту откровенно некорректную конструкцию,
тогда что за компилятор у тебя?
который с твоих слов, всё ж таки скомпилировал.

ты компилятор с++ с компилятором си не перепутал?
0
6737 / 4537 / 1838
Регистрация: 07.05.2019
Сообщений: 13,725
Записей в блоге: 1
07.09.2019, 18:20 24
Цитата Сообщение от _stanislav Посмотреть сообщение
но это разные языки и С++ не поддерживает все возможности языка С,
И какие же возможности он не поддерживает?
0
"C with Classes"
1485 / 1287 / 485
Регистрация: 16.08.2014
Сообщений: 5,414
Записей в блоге: 1
07.09.2019, 18:24 25
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
И какие же возможности он не поддерживает?
C
1
int a[10] = {1, [5] = 10, 20, [2] = 3};
0
6737 / 4537 / 1838
Регистрация: 07.05.2019
Сообщений: 13,725
Записей в блоге: 1
07.09.2019, 18:29 26
Цитата Сообщение от _stanislav Посмотреть сообщение
int a[10] = {1, [5] = 10, 20, [2] = 3};
И всё? Это какое-то принципиальное отличие, которое невозможно реализовать в с++ без существенного ухудшения кода?
Что-то не впечатляет.
0
Эксперт С++
8402 / 4078 / 891
Регистрация: 15.11.2014
Сообщений: 9,168
07.09.2019, 18:39 27
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Это какое-то принципиальное отличие, которое невозможно реализовать в с++ без существенного ухудшения кода?
это такое принципиальное отличие,
которое сделает сишный исходник непригодным для компиляции крестанутым компилятором.

любому здравомыслящему человеку этого достаточно,
что бы понимать: си и с++ - разные языки.
0
6737 / 4537 / 1838
Регистрация: 07.05.2019
Сообщений: 13,725
Записей в блоге: 1
07.09.2019, 18:42 28
Цитата Сообщение от hoggy Посмотреть сообщение
это такое принципиальное отличие,
которое сделает сишный исходник непригодным для компиляции крестанутым компилятором.
любому здравомыслящему человеку этого достаточно,
что бы понимать: си и с++ - разные языки.
Нет. Любому здравомыслящему человеку понятно, что Си это подмножество С++ с мелкими синтаксическими различиями, на
которые можно не обращать внимания.
Покажи мне код на Си, который нельзя за пару минут переделать так, чтоб он компилировался и там и там без потери функциональности.
1
С чаем беда...
Эксперт CЭксперт С++
9074 / 4606 / 1250
Регистрация: 18.10.2014
Сообщений: 10,306
07.09.2019, 18:48 29
Если бы речь шла о банальном отсутствии контроля выхода за пределы массива, то и вот такое объявление тоже бы допускалось

C
1
char s[2] = "abc";
Однако этот код является ошибочным и в С, и в С++. В то время как

C
1
char s[3] = "abc";
является совершенно корректным кодом с точки зрения языка С. Потому, что это никакой не "косяк", а вполне конкретная функциональность.
0
"C with Classes"
1485 / 1287 / 485
Регистрация: 16.08.2014
Сообщений: 5,414
Записей в блоге: 1
07.09.2019, 19:06 30
oleg-m1973, это все философия, на все можно посмотреть с разных сторон, и опять же тот кто сильней окажется прав. так что базар бесполезный.
0
Эксперт С++
8402 / 4078 / 891
Регистрация: 15.11.2014
Сообщений: 9,168
07.09.2019, 19:12 31
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Любому здравомыслящему человеку понятно, что Си это подмножество С++ с мелкими синтаксическими различиями
видимо не каждый здравомыслящий понимает смысл понятия "подмножество".

если 'си' - подможество 'c++',
значит код 'си' так же является кодом 'c++'
иначе, 'си' не является подмножеством 'c++',
даже несмотря на то, что у них много общего.

по твоей ущербной логике получается,
что с# или java - так же подмножество с++.
ведь их исходники тоже можно переписать на с++
без потерь в функциональности.
а при должной сноровке, и отсутствия явных противопоказаний по фичам - за довольно быстрый срок.

про 2 минуты ты конечно погорячился.
0
6737 / 4537 / 1838
Регистрация: 07.05.2019
Сообщений: 13,725
Записей в блоге: 1
07.09.2019, 19:16 32
Цитата Сообщение от _stanislav Посмотреть сообщение
oleg-m1973, это все философия, на все можно посмотреть с разных сторон, и опять же тот кто сильней окажется прав. так что базар бесполезный.
С каких сторон, причём здесь философия? Вроде не об си-шарпах и прочих ява-скриптах речь идёт.
Да, можно написать на Си код, который не скомпилируется в С++, кто б спорил, но его рефакторинг - очень простая техническая задача. В с++ при переходе на новую версию компилятора зачастую проблем больше.
0
Эксперт С++
8402 / 4078 / 891
Регистрация: 15.11.2014
Сообщений: 9,168
07.09.2019, 19:20 33
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Покажи мне код на Си, который нельзя за пару минут переделать так
variable length array сможешь быстро адаптировать?

C++
1
2
3
4
void foo( int n)
{
    int array[n];
}
0
zss
07.09.2019, 19:23     Использование stdafx.h
  #34
 Комментарий модератора 
Все эти разговоры к теме не имеют отношения!
Закрыто.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.09.2019, 19:23

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Не найден файл stdafx.h
#include &lt;iostream&gt; using namespace std; int main() { int i=0; while(i++&lt;10){ ...

Ошибка подключения stdafx.h
скажите пожалуйста как исправит эту ошибку Сообщения и тексты программ надо копировать в текст...

stdafx.h: No such file or directory
Как убрать ошибку? stdafx.h: No such file or directory.

Ошибка stdafx в Dev C++
Not such file in derectory. Без stdafx код не работает, но дев выдает ошибку

Ошибка stdafx.h: No such file or directory
при запуске программы выдает такую ошибку : fatal error C1083: Не удается открыть файл включение:...

Fatal error: stdafx.h: No such file or directory
Не понимаю в чем ошибка? сам код #include &quot;stdafx.h&quot; #include &quot;iostream&quot; using namespace...


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

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

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