0 / 0 / 0
Регистрация: 07.09.2019
Сообщений: 23
|
||||||
1 | ||||||
Использование stdafx.h07.09.2019, 09:39. Показов 40878. Ответов 33
Добрый день (вечер). Я учусь на первом курсе. Мы начали изучать Си, а потому нам дали учебник по этому языку, а также сказали скачать Visual Studio 2010. Скачав его и немного на нем поработав, я понял, что запутался. По ряду причин (которые я сейчас назову) я перестал понимать на каком из языков (Си или C++) я пишу.
Первая причина: директива #include <stdio.h>. В учебнике по Си именно она используется для объявления стандартных ввода-вывода. Однако в Visual Studio на место неё встает #include "stdafx.h", которая, к слову, и вызывает stdio.h. Но если не использовать #include "stdafx.h", просто написать как в учебнике (#include <stdio.h>), то компилятор начинает ругаться. Например, вот эта программа
Вторая причина: Большинство операторов и синтаксических конструкций являются командами языка Си, а не C++(например printf() и scanf() вместо cin и cout, а также %d) По этим и некоторым другим причинам(например, формат файлов .cpp, что указывает на C++) я и запутался языках. Помогите, разъясните.
0
|
07.09.2019, 09:39 | |
Ответы с готовыми решениями:
33
stdafx.h и StdAfx.h файлы stdafx Подключение stdafx.h iostream, StdAfx.h |
6770 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
|
||||||
07.09.2019, 09:44 | 2 | |||||
Не парься. Просто поставь этот stdafx.h в начале и всё
0
|
6770 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
|
|
07.09.2019, 09:47 | 4 |
с++ поддерживает все конструкции языка си. Спокойно можешь вызывать prinft, scanf и т.д.
0
|
Диссидент
27707 / 17325 / 3810
Регистрация: 24.12.2010
Сообщений: 38,979
|
|
07.09.2019, 09:59 | 5 |
Язык Си является подмножеством языка С++. (За некоторыми небольшими исключениями, на которые пока вы можете не обращать внимания). Поэтому в программе на С++ вы спокойно можете пользоваться функциями printf, scanf. И даже вперемешку с cout, cin (что не рекомендуется)
Добавлено через 3 минуты Ты можешь дать своему файлу имя с расширением .cpp и не использовать в нем ни одного оператора, специфичного для C++, то есть написать его на чистом Си. Тебя поймут.
1
|
Вездепух
12793 / 6670 / 1795
Регистрация: 18.10.2014
Сообщений: 16,890
|
|
07.09.2019, 10:07 | 6 |
Язык С++ не "поддерживает все конструкции языка си". Язык С ни в коем случае не является "подмножеством языка С++". Поэтому смешивать эти языки ни в коем случае нельзя.
Добавлено через 2 минуты В настройках нового проекта Visual Studio вы запросили использование прекомпилированных заголовков через посредство заголовка stdafx.h . В этом и заключается причина этого странного поведения и странного статуса stdafx.h . Именно поэтому компилятор Visual Studio требует включения stdafx.h во все файлы реализации и выдает ошибку, если такого включения не сделано.Выключите использование прекомпилированных заголовков в настройках вашего проекта и все придет в норму. Включать в ваши файлы stdafx.h станет не нужно.
2
|
Диссидент
27707 / 17325 / 3810
Регистрация: 24.12.2010
Сообщений: 38,979
|
||||||
07.09.2019, 10:20 | 7 | |||||
Может быть вы приведете пример простой конструкции, подтверждающий ваши слова?
Я, конечно, не имею в виду сомнительние нововведения типа
1
|
Вездепух
12793 / 6670 / 1795
Регистрация: 18.10.2014
Сообщений: 16,890
|
||||||||||||||||||||||||||
07.09.2019, 10:50 | 8 | |||||||||||||||||||||||||
Я могу сразу навскидку привести более десятка примеров простых конструкций из эры "классического" С - никаких "нововведений" не нужно.
Элементарный пример я приводил совсем недавно
0
|
6770 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
|
|
07.09.2019, 10:52 | 9 |
0
|
Вездепух
12793 / 6670 / 1795
Регистрация: 18.10.2014
Сообщений: 16,890
|
|
07.09.2019, 11:01 | 10 |
Не по теме: Не понял. (Удивленно переглянемся всем форумом.) Будем считать, что участник oleg-m1973, как говорится, "ляпнул не подумав". Я уверен, что он очень извиняется и больше так не будет. Ссылка, которая так понравилась данному оратору вела сюда: https://ru. stackoverflow.com/a/789069/182825 Я ее удалил из исходного сообщения потому, что в исходной форме она была слишком громоздкой. Привожу более компактный вариант
0
|
8972 / 4318 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
07.09.2019, 11:55 | 11 |
не слушай тех идиотов,
которые предлагают отключить предварительно скомпилированный заголовок. вместо этого загугли что это такое, и зачем он нужен. технология "предварительно скомпилированный заголовок" - крайне полезный инструмент. если на этапе обучения, ты научишься, как им правильно пользоваться, то в дальнейшем, это окажет тебе отличную услугу. и особенно не слушай тех идиотов, которые утверждают, что: так могут написать только те, кто не умеет правильно готовить это блюдо. на самом деле, нужно лишь указать имя stdafx.h ,в свойстве Force Include File, как на скриншоте: обрати внимание: All Configurations, All Platforms после чего компилятор сам догадается, где, когда, и как нужно подключать stdafx.h тебе вручную в коде писать #include "stdafx.h" не нужно.
0
|
hoggy
|
07.09.2019, 11:56
#12
|
0
|
8972 / 4318 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
07.09.2019, 12:29 | 14 |
https://rextester.com/TIID34976
Код
source_file.cpp: In function ‘int main()’: source_file.cpp:4:17: error: initializer-string for array of chars is too long [-fpermissive] char s[3] = "abc"; ^
0
|
Диссидент
27707 / 17325 / 3810
Регистрация: 24.12.2010
Сообщений: 38,979
|
|
07.09.2019, 13:33 | 15 |
Имхо, это разница не языков, а трансляторов. Ваш - умненький, эту грубую ошибку ловит, мой - дурачок, пропустил.
Но мое глубокое убеждение - для ТС выгоднее все-таки считать Си подмножеством С++. Хотя бы, чтобы распутаться со стартовыми вопросами.
0
|
Вездепух
12793 / 6670 / 1795
Регистрация: 18.10.2014
Сообщений: 16,890
|
|
07.09.2019, 17:18 | 16 |
Во-первых, у какого транслятора? Код является корректным в С и ошибочным в С++.
Во-вторых, никакой "явной ошибочности" у этого кода нет - он реализует вполне конкретную и вполне корректную функциональность. Устаревшую, но когда-то считавшуюся ценной и нужной в С. Функция strncpy - еще одна грань этой же функциональности.
Сообщение от Байт
0
|
Azazel-San
|
07.09.2019, 17:49
#17
|
Не по теме: Хотел спросить что именно имеется в виду под данным предлогом? Это понятно что смешивать нельзя, но мне интересно как глубоко уходит это понятие? Например, под не смешивать мы понимаем конструкции которые разрешены в С и не разрешены или приводят к UB в С++ и vice versa, как вы показывали, но касается ли это использования Сишных ф-й, printf, scanf, fgets, etc. ведь иногда бывает, что без них прям туго, если я не хочу использовать стандартные стримы? Чисто интересно ваше мнение.
0
|
TheCalligrapher
|
07.09.2019, 17:54
#18
|
0
|
"C with Classes"
|
|
07.09.2019, 18:05 | 20 |
ты подумал по ходу что Байт имел ввиду математическое понятие подмножества
0
|
07.09.2019, 18:05 | |
07.09.2019, 18:05 | |
Помогаю со студенческими работами здесь
20
Не найден файл stdafx.h Ошибка подключения stdafx.h stdafx.h: No such file or directory Ошибка stdafx в Dev C++ Ошибка stdafx.h: No such file or directory Fatal error: stdafx.h: No such file or directory Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |