Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 5.00/11: Рейтинг темы: голосов - 11, средняя оценка - 5.00
49 / 33 / 9
Регистрация: 27.12.2017
Сообщений: 1,337
1

Почему STL работает и под Виндовс и под Линукс?

18.02.2020, 13:13. Просмотров 2282. Ответов 34
Метки нет (Все метки)


Как STL реализована внутри когда дело касается таких классов которые делают "что-то" в системе? Например fstream , почему работает под линукс и виндовс?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.02.2020, 13:13
Ответы с готовыми решениями:

Проверка Виндовс 7 из под Линукс Минт 17
На ПК установлены 2-е ОС: Виндовс 7 и Линукс Минт 17. На Линукс я новичок. Вопрос может быть...

Не работает программа под линукс.
#include <unistd.h> #include <asm/io.h> #define time 1000 int main() { ioperm(0x278,1,1); ...

Купить ноутбук под Линуксом или под вин-7 и добавить Линукс Минт?
Я звонил продавцам, пытая, что за Линукс установлен, в частности, в «Нотике», ничего...

=Sum([BYN]) не работает под терминалом, если запустить нормально - все работает. ПОЧЕМУ ?
в общем разделил базу могу сидеть в lan сети и использовать таблицы по сети редактируя морду. Все...

34
поисковый робот
29 / 22 / 8
Регистрация: 04.02.2020
Сообщений: 96
18.02.2020, 13:16 2
Цитата Сообщение от ReYalp Посмотреть сообщение
Например fstream , почему работает под линукс и виндовс?
при чём тут STL ?
0
49 / 33 / 9
Регистрация: 27.12.2017
Сообщений: 1,337
18.02.2020, 13:35  [ТС] 3
cpp_user, разве fstream не в stl?

Добавлено через 2 минуты
да, не в stl , а просто в стандартной билиотеке но суть вопроса это не меняет , как fstream одинаково раюотает для линукс и виндовс?
0
749 / 352 / 72
Регистрация: 10.06.2014
Сообщений: 2,369
18.02.2020, 13:41 4
Лучший ответ Сообщение было отмечено ReYalp как решение

Решение

ReYalp,
можно используя определенные макросы выяснять на какой платформе компилируется код.
если под виндой - использовать функции винды. если другая ОС то использовать ее функции которые по смыслу аналогичны виндовым.
1
49 / 33 / 9
Регистрация: 27.12.2017
Сообщений: 1,337
18.02.2020, 13:43  [ТС] 5
Undisputed, так и думал ) но не думал что это реально, кстати насчет STL , разве fstream не в STL?
0
749 / 352 / 72
Регистрация: 10.06.2014
Сообщений: 2,369
18.02.2020, 13:45 6
Цитата Сообщение от ReYalp Посмотреть сообщение
разве fstream не в STL?
Да, STL
0
поисковый робот
29 / 22 / 8
Регистрация: 04.02.2020
Сообщений: 96
18.02.2020, 13:46 7
Цитата Сообщение от ReYalp Посмотреть сообщение
разве fstream не в STL?
ну вы просто вопрос непонятно задали
Связали STL, систему и fstream.
Это как искать связь между теплым, мягким и зеленым.
0
913 / 591 / 291
Регистрация: 22.02.2018
Сообщений: 1,740
Записей в блоге: 2
18.02.2020, 13:48 8
Просто язык С (С++) - кроссплатформенный и базовые библиотеки и их производные не используют специфические, присущие конкретной области, особенности ОС. Код преобразуется компилятором в машинные команды процессора, для которого компилятор создан, поэтому не проблема перенести код с одной архитектуры на другую при учете возможности исполнения одних и тех же функций-операторов, ну и с учетом разрядности.
0
49 / 33 / 9
Регистрация: 27.12.2017
Сообщений: 1,337
18.02.2020, 13:50  [ТС] 9
TrollHammer, Это же не так работает , потоки ввода-вывода должны использовать API системы, по-другому никак

Добавлено через 1 минуту
cpp_user, stl - кроссплатформенная , думал будет понятно, а fstream навел как пример для чего и написал
Цитата Сообщение от ReYalp Посмотреть сообщение
Например
0
855 / 445 / 111
Регистрация: 06.07.2013
Сообщений: 1,483
18.02.2020, 14:02 10
Цитата Сообщение от Undisputed Посмотреть сообщение
можно используя определенные макросы выяснять на какой платформе компилируется код.
Тут даже макросы не нужны, компилятор сам по себе знает под какую платформу он, просто у каждого компилятора свои реализации
1
913 / 591 / 291
Регистрация: 22.02.2018
Сообщений: 1,740
Записей в блоге: 2
18.02.2020, 14:10 11
Лучший ответ Сообщение было отмечено ReYalp как решение

Решение

ReYalp, библиотеки, использующие потоки ввода-вывода, для компиляторов разных архитектур используют базовые машинные команды процессора, и тот же Hello word скомпилируется как на x86, так и на Z80.
1
поисковый робот
29 / 22 / 8
Регистрация: 04.02.2020
Сообщений: 96
18.02.2020, 14:12 12
Цитата Сообщение от ReYalp Посмотреть сообщение
потоки ввода-вывода должны использовать API системы, по-другому никак
интереса ради полазил по исходникам, ничего там платформазависимого не нашел
ни каких макросов вроде UNIX, WIN32, WIN64
1
Mental handicap
1243 / 621 / 171
Регистрация: 24.11.2015
Сообщений: 2,426
18.02.2020, 14:19 13
Цитата Сообщение от ReYalp Посмотреть сообщение
stl - кроссплатформенная
Как библиотека да, но не как конкретная реализация.
Т.е. реализация stl от Microsoft не заведется на Линуксе под GCC.
0
749 / 352 / 72
Регистрация: 10.06.2014
Сообщений: 2,369
18.02.2020, 14:19 14
Цитата Сообщение от Raali Посмотреть сообщение
компилятор сам по себе знает под какую платформу он
Да, но иногда проще проверить макрос чем поддерживать несколько версий одного и того же файла. Правки в таком случае придется вносить во все поддерживаемые файлы под все платформы.
0
поисковый робот
29 / 22 / 8
Регистрация: 04.02.2020
Сообщений: 96
18.02.2020, 14:20 15
Цитата Сообщение от cpp_user Посмотреть сообщение
интереса ради полазил по исходникам,
ios_base, ios istream, ostream, iostream, fstream
0
49 / 33 / 9
Регистрация: 27.12.2017
Сообщений: 1,337
18.02.2020, 14:23  [ТС] 16
Azazel-San, тоесть вариант с тем что
Цитата Сообщение от TrollHammer Посмотреть сообщение
библиотеки, использующие потоки ввода-вывода, для компиляторов разных архитектур используют базовые машинные команды процессора, и тот же Hello word скомпилируется как на x86, так и на Z80.
это правильный ответ? никаких макросов и использования АПИ?
0
Mental handicap
1243 / 621 / 171
Регистрация: 24.11.2015
Сообщений: 2,426
18.02.2020, 14:25 17
Цитата Сообщение от ReYalp Посмотреть сообщение
это правильный ответ? никаких макросов и использования АПИ?
Правильно, тк в этом нету смысла.
Нет, ну, макросы то используют, но не для проверки, а случаем не на Линуксе ли мы.
1
913 / 591 / 291
Регистрация: 22.02.2018
Сообщений: 1,740
Записей в блоге: 2
18.02.2020, 14:26 18
Цитата Сообщение от ReYalp Посмотреть сообщение
это правильный ответ?
Не совсем. Под компилятор языка под конкретный процессор адаптируются библиотеки, но их использование ничем не отличается на разных платформах и ОС.
1
749 / 352 / 72
Регистрация: 10.06.2014
Сообщений: 2,369
18.02.2020, 14:30 19
Цитата Сообщение от Azazel-San Посмотреть сообщение
Нет, ну, макросы то используют, но не для проверки, а случаем не на Линуксе ли мы.
Ага. На каждой платформе железно свои файлы без пересечений с другими платформами.
https://github.com/gcc-mirror/... ops.cc#L91
0
Mental handicap
1243 / 621 / 171
Регистрация: 24.11.2015
Сообщений: 2,426
18.02.2020, 14:42 20
Цитата Сообщение от Azazel-San Посмотреть сообщение
Нет, ну, макросы то используют
Есть макросы проверки есть ли Си рантайм, какая разрядность платформы, версия SDK, вот это имеет смысл.

Добавлено через 10 минут
Цитата Сообщение от Undisputed Посмотреть сообщение
Ага. На каждой платформе железно свои файлы без пересечений с другими платформами.
Ну и?
Еще раз. Гарантии о кроссплатформе можно получить только изучив конкретную реализацию. Но стандарт ничего такого не обещает, что реализации стандартной библиотекы должны быть кроссплатформными. Потому, что это тонкости реализации. Соответственно, если есть хотя бы одна реализация stl, которая не дает таких гарантий (например, от MSVC), считать все реализации stl кроссплатформными нельзя. В этой теме речь шла вообще об stl, а не об конкретной реализации.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.02.2020, 14:42

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

Создание ярлыка работает под Win7, но не работает под WinXP
Господа посмотрел пример в msdn ориентировочно сделал так же как и у них создаётся ярлык на рабочий...

Почему is_readable не работает на Denwer под Windows?
Почему is_readable не работает на denwer в windows? Версия Denwer последняя.

А у меня почему-то Delphi7 не работает под Win7
А у меня почему-то Delphi7 не работает под Win7. Выходит сообщение, что данная программа не...

Qwt не работает под компилятором MinGW, хотя запускается под msvc
Добры день. Я скомпилировал qwt через компилятор msvc 2013, чтобы работал плагин для дизайнера...


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

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

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