C/C++ инструменты - их свежие версии
Модератор: Olej
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
C/C++ инструменты - их свежие версии
Это общеизвестно, что С и C++, как весьма старые языки, прошли (каждый по себе) через ряд стандартов, несовместимых меж собой сверху вниз.
Про C, существующим с 1970 года практически, одновременно с UNIX для которого и был создан, в сё более менее устаканившись ... про стандарты C я как-то даже написал обзор: Язык C: заметки на полях (2014г. ... я даже не вспомню по чьему заказу это делалось ) - стандарты C89, C99.
По С++ стандартизация идёт более поздняя, более активная: C++11, C++14, C++17, C++20 ...
Но тема эта не (столько) про стандарты, сколько про инструменты: сами по себе языки - это система формализмов, соглашения ... а для работы с ними нужны инструменты и возникают вопросы:
- поддержки стандартов;
- информации по стандартам;
- совместимость инструментов;
Про C, существующим с 1970 года практически, одновременно с UNIX для которого и был создан, в сё более менее устаканившись ... про стандарты C я как-то даже написал обзор: Язык C: заметки на полях (2014г. ... я даже не вспомню по чьему заказу это делалось ) - стандарты C89, C99.
По С++ стандартизация идёт более поздняя, более активная: C++11, C++14, C++17, C++20 ...
Но тема эта не (столько) про стандарты, сколько про инструменты: сами по себе языки - это система формализмов, соглашения ... а для работы с ними нужны инструменты и возникают вопросы:
- поддержки стандартов;
- информации по стандартам;
- совместимость инструментов;
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: C/C++ инструменты - версии
В качестве обстоятельных онлайновых справочников по C++, с разграничениями по версиям языка, я знаю 2:
1. Standard C++ Library reference
2. C++ referenceC++98 C++11
P.S. Все остальные, которые мне встречались, или а). не обстоятельными, или б). не даёт чёткого разграничения для каких версий применимо.C++98, C++03, C++11, C++14, C++17, C++20, C++23
P.P.S. Если со временем появится что-то ещё достояное, тоя его буду сюда просто вписывать.
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: C/C++ инструменты - версии
Разговор вот о чём:
Код: Выделить всё
#include <iostream>
#include <set>
// https://en.cppreference.com/w/cpp/container/set/contains
int main()
{
std::set<int> example = {1, 2, 3, 4};
for(int x: {2, 5}) {
if(example.contains(x)) {
std::cout << x << ": Found\n";
} else {
std::cout << x << ": Not found\n";
}
}
}
Код: Выделить всё
olej@nvme:~/2021/OWN_TEST.codes/set$ make
g++ -Wall -pedantic -std=c++17 set.cc -o set
set.cc: In function ‘int main()’:
set.cc:11:20: error: ‘class std::set<int>’ has no member named ‘contains’
11 | if(example.contains(x)) {
| ^~~~~~~~
make: *** [Makefile:9: set] Ошибка 1
Код: Выделить всё
olej@nvme:~/2021/OWN_TEST.codes/set$ make
g++ -Wall -pedantic -std=c++2a set.cc -o set
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: C/C++ инструменты - версии
... и о а). соответствии разных версий разных компиляторов стандартам + б). опций компилятора для указания стандарта:
Код: Выделить всё
olej@nvme:~/2021/OWN_TEST.codes/set$ make
g++ -Wall -pedantic -std=c++2a set.cc -o set
Код: Выделить всё
olej@nvme:~/2021/OWN_TEST.codes/set$ g++ --version
g++ (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Код: Выделить всё
olej@nvme:~/2021/OWN_TEST.codes/set$ clang++ set.cc -xc++ -std=c++20 -o set
Код: Выделить всё
olej@nvme:~$ clang --version
clang version 10.0.0-4ubuntu1
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin
Код: Выделить всё
olej@nvme:~/2021/OWN_TEST.codes/set$ cat Makefile
TASK = set
#CXX += -Wall -pedantic -std=c++11
#CXX += -Wall -pedantic -std=c++14
#CXX += -Wall -pedantic -std=c++17
#CXX += -Wall -pedantic -std=c++2a
CXX = clang++ -xc++ -std=c++20
all: $(TASK)
%: %.cc
$(CXX) $< -o $@
clean:
rm -f $(TASK)
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: C/C++ инструменты - их свежие версии
Относительно синтаксических новинок, введенных с C++11 (последующие стандарты главным образом только углубляют их) есть очень хорошее обсуждение в книге, которая не совсем относится к этой теме:
Про книгу подробнее, и то, как и где её свободно скачать, см. в теме: C++: параллельность, асинхронность, атомарностьПРИЛОЖЕНИЕ A. Краткий справочник
по некоторым конструкциям языка C++ ........ 437
A.1. Ссылки на r-значения ...................................................... 437
A.1.1. Семантика перемещения ................................................ 439
A.1.2. Ссылки на r-значения и шаблоны функций ...................... 442
A.2. Удаленные функции ........................................................ 442
A.3. Умалчиваемые функции .................................................. 445
A.4. constexpr-функции .......................................................... 449
A.4.1. constexpr и определенные пользователем типы .............. 450
A.4.2. constexpr-объекты .......................................................... 454
A.4.3.Требования к constexpr-функциям ................................... 454
A.4.4. constexpr и шаблоны ....................................................... 455
A.5. Лямбда-функции ............................................................ 456
A.5.1. Лямбда-функции, ссылающиеся на локальные переменные ... 458
A.6. Шаблоны с переменным числом параметров .................. 461
A.6.1. Расширение пакета параметров ..................................... 463
A.7. Автоматическое выведение типа переменной ................. 466
A.8. Поточно-локальные переменные .................................... 467
A.9. Резюме ........................................................................... 469
P.S. Выше я написал "очень хорошее" - потому что не на уровне теоретических построений и академических нюансов, а "на пальцах" ровно в той мере и как, в какой эти новинки используются в технике параллельных вычислений... 32 страницы.
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: C/C++ инструменты - их свежие версии
Компилирую примеры к своей рукописи 2012г. ... которые многократно со всей тщательностью отрабатывались и компилировались.
И получаю (что там собиралось не принципиально важно):
И получаю (что там собиралось не принципиально важно):
Код: Выделить всё
olej@R420:~/2022/own.BOOKs/SMP/examples.SMP.05/affinity$ make
gcc -lpthread -lm tspeed.c common.c -o tspeed
/usr/bin/ld: /tmp/cc36uUlc.o: в функции «main»:
tspeed.c:(.text+0x2c5): неопределённая ссылка на «pthread_create»
/usr/bin/ld: tspeed.c:(.text+0x31b): неопределённая ссылка на «pthread_join»
/usr/bin/ld: /tmp/ccH0gSad.o: в функции «calibrate_for»:
common.c:(.text+0x33d): неопределённая ссылка на «round»
/usr/bin/ld: common.c:(.text+0x3c4): неопределённая ссылка на «round»
/usr/bin/ld: /tmp/ccH0gSad.o: в функции «set_active»:
common.c:(.text+0x43d): неопределённая ссылка на «round»
collect2: error: ld returned 1 exit status
make: *** [Makefile:10: tspeed] Ошибка 1
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: C/C++ инструменты - их свежие версии
Как выяснил поиск:
(выделено мной)В последних версиях gccкомпилятора требуется, чтобы библиотеки следовали за объектами или исходными файлами.
Итак, для компиляции это должно быть:
gcc pthread_sample.c -lpthread
Код: Выделить всё
olej@R420:~/2022/own.BOOKs/tasks-C/c_codes/array$ gcc --version
gcc (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Код: Выделить всё
olej@R420:~/2022/own.BOOKs/BHV/examples/afinity$ cat Makefile
CC = gcc
CFLAGS += -Wall
LDFLAGS += -lpthread
PROGLIST = how-many-p how-many-t
all: $(PROGLIST)
%: %.c
$(CC) $< $(CFLAGS) -o $@ $(LDFLAGS)
clean:
@rm -f *.o $(PROGLIST)
Код: Выделить всё
olej@R420:~/2022/own.BOOKs/BHV/examples/afinity$ ls *.c
how-many-p.c how-many-t.c
Код: Выделить всё
olej@R420:~/2022/own.BOOKs/BHV/examples/afinity$ make clean
olej@R420:~/2022/own.BOOKs/BHV/examples/afinity$ make
cc how-many-p.c -Wall -o how-many-p -lpthread
cc how-many-t.c -Wall -o how-many-t -lpthread
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 14 гостей