SlideShare une entreprise Scribd logo
1  sur  85
Télécharger pour lire hors ligne
C++17: Not Your Father’s C++
Pat Viafore
@PatViaforever
DevSpace 2017
CSE 2050 : Programming in a Second Language
hello.c
// my first c program
#include <stdio.h>
int main()
{
printf("Hello, %sn", "World!");
return 0;
}
hello.cpp
// my first c++ program
#include <stdio.h>
int main()
{
printf("Hello, %sn", "World!");
return 0;
}
Is this all C++ is?
● std::cout?
● std::vector?
● std::map?
● std::string?
● classes w/ inheritance?
4 subsets of C++
1. The C programming language
2. Object-Oriented
3. STL library
4. Template Metaprogramming
C++ is not the language I thought it was
We’re going to look at
modern C++ and see how
it has transformed from
“C With Classes”
C++ 11
C++ 17
C++ 14
Expressiveness
Code what you mean,
mean what you code
#include <algorithm>
find_if(v.begin(), v.end(), isSpecial);
count_if(v.begin(), v.end(), isNull);
#include <algorithm>
unique_copy(v.begin(), v.end(), v2.begin());
partition(v.begin(), v.end(), isAnAdult);
#include <algorithm>
nth_element(v.begin(), v.begin()+7, v.end());
transform(v.begin(), v.end(), v.begin(),
std::bind2nd(std::plus<int>(), 5);
Lambda Expressions
[capture-group](parameters)
{
function-body
};
C++ 11
Lambda Expressions
auto isSpecial =
[](int x) { return x == 5 || x >= 13;};
std::count_if(v.begin(), v.end(), isSpecial);
C++ 11
(Smart?)
Pointers
Smart Pointers
std::unique_ptr<Widget> makeWidget() {
return make_unique<Widget>(5,12,”param”);
}
//unique pointers have single ownership
std::unique_ptr<Widget> w = makeWidget();
C++ 11/14
Smart Pointers
std::shared_ptr<Widget> makeWidget() {
return make_shared<Widget>(5,12,”param”);
}
//unique pointers have multiple ownership
std::shared_ptr<Widget> w = makeWidget();
C++ 11/14
Quality Of
Life
C++17 Destructuring C++ 17
//c++11
int i;
float f;
std::string s;
std::tie(i,f,s) = make_tuple(5, 3.4, “c++11”);
C++17 Destructuring C++ 17
//c++17
auto [i2,f2,s2] = make_tuple(5, 3.4, “C++17”);
C++17 Attributes C++ 17
switch(condition) {
case 1:
std::cout <<”Option 1n”;
break;
case 3:
std::cout <<”Exceptional Valuen”;
[[fallthrough]];
default:
break;
}
C++17 Attributes C++ 17
[[maybe_unused]] static void log() {}
#if LOGGING_ENABLED
log();
#endif
C++17 Attributes C++ 17
[[nodiscard]] int importantFunction();
[[nodiscard]] struct lockGuard {};
importantFunction(); //warning
lockGuard f();
f(); //warning
std::filesystem
Path handling
Directory handling
File/Directory Options
Symlinking
And so much more...
C++ 17
C++17 Miscellany C++ 17
namespace x::y::z {
void print() {
std::byte b = std::byte(0b1001);
b = clamp(b, std::byte(5), std::byte(8));
if(auto opt = getOpts(); opt.isConsole) {
int i = std::to_integer<int>(b);
std::cout << i << "n";
}
}
}
Concurrent and Parallel
Operations
Concurrency
std::mutex
std::thread
std::future
std::atomic
C++ 11
Reproduction of Joe Armstrong’s
picture by Yossi Kreinin
http://yosefk.com/blog/parallelism-and-concurrency-nee
d-different-tools.html
Parallelism
std::vector<int> v = {1,2,3,4,5};
auto times3 = [](int i) { return i * 3;};
std::transform(std::par, v.begin(), v.end(),
v.begin(), times3);
C++ 17
Parallelism
std::transform(std::par_vec, v.begin(),
v.end(), v.begin(), addOne);
C++ 17
Type System
Wooo!
Type Inference
auto i = 5;
auto f = 3.4
auto v = getVector();
C++ 11
Type Inference
//c++03
for(std::vector<int>::iterator i= v.begin();
i !=v.end(); ++i)
C++ 11
Type Inference
//c++11
for(auto i = v.begin(); i != v.end(); ++i);
C++ 11
Type Inference
//alternatively (also in c++11)
for(auto &i: v)
C++ 11
Type Inference (continued)
auto isSpecial = [](int x) { return x == 5; };
auto a = [](auto x, auto y) { return x + y; };
auto get_second(auto &container) {
return container.begin() + 1;
}
C++ 11/14
std::string_view
auto getNumUpperCase(std::string_view s){
return count_if(s.begin(), s.end(), isupper);
}
getNumUpperCase("One”)
getNumUpperCase("TWo"s)
getNumUpperCase(MyStr{"THR"})
C++17
std::variant
std::variant<int, float, std::string> v;
v = 5;
std::cout << std::get<int>(v) << "n";
v = "Now I'm a String!"s;
std::cout << std::get<std::string>(v) << "n";
C++17
std::variant
std::variant<int, float, std::string> v;
v = 5;
std::cout << std::get<string>(v) << "n";
// the above throws
// a bad_variant_access exception
C++17
A Quick Look at Haskell
data Custom = Option1 | Option2 Int
doSomething :: Custom -> Int
doSomething Option1 = 0
doSomething (Option2 x) = x
std::visit
template<class... Ts> struct make_visitor : Ts...
{ using Ts::operator()...; };
template<class... Ts> make_visitor(Ts...) ->
make_visitor<Ts...>;
std::variant<int, float, std::string> v;
C++17
std::visit
std::visit( make_visitor {
[](int a) { std::cout << a << " int n"; }
[](float a) { std::cout << a << " float n"; }
[](std::string a) { std::cout << a << "n"; }
}, v);
C++17
std::optional
std::optional<std::string> opt;
std::cout << opt.value_or("Missing") << "n";
opt = "Filled in value";
std::cout << opt.value_or("Missing") << "n";
C++17
std::any
auto a = std::any(12);
std::cout << std::any_cast<int>(a) << “n”;
//throws bad_any_cast exception
std::any_cast<std::string>(a)
C++17
Templates
I’ve never metaprogram I
didn’t like
Templates
std::vector<int> v;
std::vector<double> v2;
template <typename T>
class DuplicateType {
T val1;
T val2;
};
Compile-time
vs.
Runtime
Template Metaprogramming
template<int T>
int factorial() {
return factorial<T-1>() * T;
}
template <>
int factorial<0>() { return 1; }
std::cout << factorial<7>;
Variadic Templates
template <typename… Values> class Variadic{
…
}
std::tuple<int, double, std::string, float> t;
C++ 11
Fold Expressions
template <typename… Values>
auto sum(Values… values) {
return ( … + values);
}
C++ 17
constexpr
template<int32_t T>
unsigned int getBits() {
unsigned int counter = 0;
for (unsigned int i = 0; i < 32; ++i) {
if(T & (0x1 << i)) counter++;
}
return counter;
}
C++ 11
constexpr
constexpr unsigned int factorial(int n) {
return n <= 0 ? 1 : (n * factorial(n - 1));
}
int main() {
std::cout << getBits<factorial(5)>();
std::cout << factorial(5);
return 0;
}
C++ 11
If constexpr
template <typename T>
void printSpecialized(T t){
if constexpr (is_integral<T>())
std::cout << "Integral " << t << "n";
else if constexpr(is_floating_point<T>())
std::cout << "Float " << t << "n";
}
C++ 17
What’s next?
Yarr, there be
uncharted lands
ahead!
Concepts
template concept bool Fractional<T> =
Floating<T> || QuotiendField<T>;
C++ ?
Ranges
std::vector numbers = { 1, 2, 3, 4, 5 };
ranges::accumulate(numbers |
view::transform(addOne) |
view::filter(isEven) |
view::transform(invert)
, 0);
C++ ?
Reflection
template<typename T> print(T a, T b) {
std::cout
<< $T.qualified_name() << ">("
<< $a.name()<<'':<< $a.type().name()
<< ',' << $b.name()<<':'<<$b.type().name()
<< ") = ";
}
C++ ?
And many more?
tasks?
std::network IO?
coroutines?
modules?
C++ ?
Is it a bust?
Here’s my personal litmus test for whether
we’ve changed the way people program: Just
as you can take a look at a screenful of code
and tell that it’s C++11 (not C++98), if you
can look at a screenful of code and tell that
it’s C++17, then we’ve changed the way we
program C++. I think C++17 will meet that
bar.
--Herb Sutter
There are only two kinds of languages: the
ones people complain about and the ones
nobody uses.
--Bjarne Stroustrup

Contenu connexe

Tendances

Categories for the Working C++ Programmer
Categories for the Working C++ ProgrammerCategories for the Working C++ Programmer
Categories for the Working C++ Programmer
Platonov Sergey
 
C++ Introduction
C++ IntroductionC++ Introduction
C++ Introduction
parmsidhu
 
please sir i want to comments of every code what i do in eachline . in this w...
please sir i want to comments of every code what i do in eachline . in this w...please sir i want to comments of every code what i do in eachline . in this w...
please sir i want to comments of every code what i do in eachline . in this w...
hwbloom27
 
(Www.entrance exam.net)-tcs placement sample paper 2
(Www.entrance exam.net)-tcs placement sample paper 2(Www.entrance exam.net)-tcs placement sample paper 2
(Www.entrance exam.net)-tcs placement sample paper 2
Pamidimukkala Sivani
 

Tendances (20)

C language
C languageC language
C language
 
Categories for the Working C++ Programmer
Categories for the Working C++ ProgrammerCategories for the Working C++ Programmer
Categories for the Working C++ Programmer
 
Programming in C [Module One]
Programming in C [Module One]Programming in C [Module One]
Programming in C [Module One]
 
High performance web programming with C++14
High performance web programming with C++14High performance web programming with C++14
High performance web programming with C++14
 
C programming Lab 2
C programming Lab 2C programming Lab 2
C programming Lab 2
 
C++ Introduction
C++ IntroductionC++ Introduction
C++ Introduction
 
programming in C++ report
programming in C++ reportprogramming in C++ report
programming in C++ report
 
C lab-programs
C lab-programsC lab-programs
C lab-programs
 
please sir i want to comments of every code what i do in eachline . in this w...
please sir i want to comments of every code what i do in eachline . in this w...please sir i want to comments of every code what i do in eachline . in this w...
please sir i want to comments of every code what i do in eachline . in this w...
 
Concepts of C [Module 2]
Concepts of C [Module 2]Concepts of C [Module 2]
Concepts of C [Module 2]
 
175035 cse lab-05
175035 cse lab-05 175035 cse lab-05
175035 cse lab-05
 
Introduction to C++
Introduction to C++Introduction to C++
Introduction to C++
 
Debugging and Profiling C++ Template Metaprograms
Debugging and Profiling C++ Template MetaprogramsDebugging and Profiling C++ Template Metaprograms
Debugging and Profiling C++ Template Metaprograms
 
CSE240 Pointers
CSE240 PointersCSE240 Pointers
CSE240 Pointers
 
C++ Programming - 2nd Study
C++ Programming - 2nd StudyC++ Programming - 2nd Study
C++ Programming - 2nd Study
 
Intro to c++
Intro to c++Intro to c++
Intro to c++
 
How to Adopt Modern C++17 into Your C++ Code
How to Adopt Modern C++17 into Your C++ CodeHow to Adopt Modern C++17 into Your C++ Code
How to Adopt Modern C++17 into Your C++ Code
 
project report in C++ programming and SQL
project report in C++ programming and SQLproject report in C++ programming and SQL
project report in C++ programming and SQL
 
(Www.entrance exam.net)-tcs placement sample paper 2
(Www.entrance exam.net)-tcs placement sample paper 2(Www.entrance exam.net)-tcs placement sample paper 2
(Www.entrance exam.net)-tcs placement sample paper 2
 
1 introduction to c program
1 introduction to c program1 introduction to c program
1 introduction to c program
 

Similaire à C++17 not your father’s c++

Computer science-2010-cbse-question-paper
Computer science-2010-cbse-question-paperComputer science-2010-cbse-question-paper
Computer science-2010-cbse-question-paper
Deepak Singh
 
Qust & ans inc
Qust & ans incQust & ans inc
Qust & ans inc
nayakq
 
cuptopointer-180804092048-190306091149 (2).pdf
cuptopointer-180804092048-190306091149 (2).pdfcuptopointer-180804092048-190306091149 (2).pdf
cuptopointer-180804092048-190306091149 (2).pdf
YashwanthCse
 
Mouse programming in c
Mouse programming in cMouse programming in c
Mouse programming in c
gkgaur1987
 

Similaire à C++17 not your father’s c++ (20)

C++ Code as Seen by a Hypercritical Reviewer
C++ Code as Seen by a Hypercritical ReviewerC++ Code as Seen by a Hypercritical Reviewer
C++ Code as Seen by a Hypercritical Reviewer
 
Pattern printing-in-c(Jaydip Kikani)
Pattern printing-in-c(Jaydip Kikani)Pattern printing-in-c(Jaydip Kikani)
Pattern printing-in-c(Jaydip Kikani)
 
Computer science-2010-cbse-question-paper
Computer science-2010-cbse-question-paperComputer science-2010-cbse-question-paper
Computer science-2010-cbse-question-paper
 
Qust & ans inc
Qust & ans incQust & ans inc
Qust & ans inc
 
How to Adopt Modern C++17 into Your C++ Code
How to Adopt Modern C++17 into Your C++ CodeHow to Adopt Modern C++17 into Your C++ Code
How to Adopt Modern C++17 into Your C++ Code
 
Lab. Programs in C
Lab. Programs in CLab. Programs in C
Lab. Programs in C
 
pattern-printing-in-c.pdf
pattern-printing-in-c.pdfpattern-printing-in-c.pdf
pattern-printing-in-c.pdf
 
C++11
C++11C++11
C++11
 
C multiple choice questions and answers pdf
C multiple choice questions and answers pdfC multiple choice questions and answers pdf
C multiple choice questions and answers pdf
 
The Present and The Future of Functional Programming in C++
The Present and The Future of Functional Programming in C++The Present and The Future of Functional Programming in C++
The Present and The Future of Functional Programming in C++
 
Program presentation
Program presentationProgram presentation
Program presentation
 
Unit i intro-operators
Unit   i intro-operatorsUnit   i intro-operators
Unit i intro-operators
 
Programming in C Presentation upto FILE
Programming in C Presentation upto FILEProgramming in C Presentation upto FILE
Programming in C Presentation upto FILE
 
C++11 & C++14
C++11 & C++14C++11 & C++14
C++11 & C++14
 
CPP Language Basics - Reference
CPP Language Basics - ReferenceCPP Language Basics - Reference
CPP Language Basics - Reference
 
basics of C and c++ by eteaching
basics of C and c++ by eteachingbasics of C and c++ by eteaching
basics of C and c++ by eteaching
 
cuptopointer-180804092048-190306091149 (2).pdf
cuptopointer-180804092048-190306091149 (2).pdfcuptopointer-180804092048-190306091149 (2).pdf
cuptopointer-180804092048-190306091149 (2).pdf
 
2. Data, Operators, IO.ppt
2. Data, Operators, IO.ppt2. Data, Operators, IO.ppt
2. Data, Operators, IO.ppt
 
Mouse programming in c
Mouse programming in cMouse programming in c
Mouse programming in c
 
The present and the future of functional programming in c++
The present and the future of functional programming in c++The present and the future of functional programming in c++
The present and the future of functional programming in c++
 

Plus de Patrick Viafore

Plus de Patrick Viafore (12)

User-Defined Types.pdf
User-Defined Types.pdfUser-Defined Types.pdf
User-Defined Types.pdf
 
The Most Misunderstood Line In Zen Of Python.pdf
The Most Misunderstood Line In Zen Of Python.pdfThe Most Misunderstood Line In Zen Of Python.pdf
The Most Misunderstood Line In Zen Of Python.pdf
 
Robust Python.pptx
Robust Python.pptxRobust Python.pptx
Robust Python.pptx
 
Tip Top Typing - A Look at Python Typing
Tip Top Typing - A Look at Python TypingTip Top Typing - A Look at Python Typing
Tip Top Typing - A Look at Python Typing
 
RunC, Docker, RunC
RunC, Docker, RunCRunC, Docker, RunC
RunC, Docker, RunC
 
DevSpace 2018 - Practical Computer Science: What You Need To Know Without Th...
 DevSpace 2018 - Practical Computer Science: What You Need To Know Without Th... DevSpace 2018 - Practical Computer Science: What You Need To Know Without Th...
DevSpace 2018 - Practical Computer Science: What You Need To Know Without Th...
 
Controlling Raspberry Pis With Your Phone Using Python
Controlling Raspberry Pis With Your Phone Using PythonControlling Raspberry Pis With Your Phone Using Python
Controlling Raspberry Pis With Your Phone Using Python
 
Building a development community within your workplace
Building a development community within your workplaceBuilding a development community within your workplace
Building a development community within your workplace
 
Lambda Expressions in C++
Lambda Expressions in C++Lambda Expressions in C++
Lambda Expressions in C++
 
BDD to the Bone: Using Behave and Selenium to Test-Drive Web Applications
BDD to the Bone: Using Behave and Selenium to Test-Drive Web ApplicationsBDD to the Bone: Using Behave and Selenium to Test-Drive Web Applications
BDD to the Bone: Using Behave and Selenium to Test-Drive Web Applications
 
Hsv.py Lightning Talk - Bottle
Hsv.py Lightning Talk - BottleHsv.py Lightning Talk - Bottle
Hsv.py Lightning Talk - Bottle
 
Controlling the browser through python and selenium
Controlling the browser through python and seleniumControlling the browser through python and selenium
Controlling the browser through python and selenium
 

Dernier

TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
mohitmore19
 
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdfintroduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
VishalKumarJha10
 
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesAI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
VictorSzoltysek
 

Dernier (20)

How To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsHow To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.js
 
How to Choose the Right Laravel Development Partner in New York City_compress...
How to Choose the Right Laravel Development Partner in New York City_compress...How to Choose the Right Laravel Development Partner in New York City_compress...
How to Choose the Right Laravel Development Partner in New York City_compress...
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
 
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Models
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
 
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdfintroduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
 
5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial Goals
 
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS LiveVip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
 
Exploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdfExploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdf
 
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesAI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
 
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...
 
8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students
 

C++17 not your father’s c++