Show Lecture.Introduction as a slide show.
CS253 Introduction
Bjarne Stroustrup presents C++ to the Founding Fathers
Things you need to know
![a picture of Jack Applin, looking strict a picture of Jack Applin, looking strict](/~applin/Jack/Jack7.jpg)
Do I look like your mother?
- E.g. = “for example”.
- I.e. = “in other words”.
- Emit = “produce”. Fires emit smoke.
Emit ≠ omit.
- Oxford Comma: A, B, and C.
- No Canvas messages/submission comments;
email or Teams.
- No email/Teams images; plain text.
- ISO 8601: 2024‒08‒30 = August 30, 2024.
- L toggles link underlining.
- Learn to read documentation: if, getopt(), cp.
- 11:59ᴘᴍ MT Saturday means just that.
- Unpack/build error? No points.
- It can be easily fixed?
- It worked on your computer?
- You worked really hard on it?
- Needed for a scholarship?
- Parents will be angry?
Origin
B-Strous
- 1979: Bjarne Stroustrup, at AT&T Bell Labs,
began work on “C with classes”.
- 1983: “C with classes” was renamed as “C++”.
- 1998: C++ first standardized by ISO.
Dialects
- In this class, we’re learning C++, not g++.
- g++ is the particular implementation of C++ that we use in
class. g++ is the compiler that transforms source code
written in the C++ language into executable machine instructions.
- Many C++ compilers exist: Clang, Microsoft Visual Studio, etc.
- Similarly, there are many dialects of English, Spanish, French, etc.
Standards
auto 🐵=[](){ return "🍌"; };
cout << 🐵();
🍌
- Is that code on the right valid C++?
- How do we tell what’s real C++ and what’s a dialect?
- Let’s back up—how do know anything ?
- Definitions are by consensus.
“Dog” means 🐕 because we agree on that.
- Says who? Mom? Your next-door neighbor? The President?
The loudest person?
- An authority: a dictionary, the law, a committee,
scholarly consensus, an influential leader, etc.
Authorities
The important part is not the answer, it’s the “according to”.
Who’s the best pop singer?
Beyoncé, according to … not the BeyHive, but the population
When is the holiday Washington’s Birthday?
the third Monday in February, according to … the U.S. Congress
Is Pluto a planet?
no, according to … the International Astronomical Union
How long is a meter?
1⁄299792458 light-second, according to … ISO
Standard C++
- C++ is defined by ISO,
the International Organization for Standardization (?),
and its national member organizations such as ANSI,
the American National Standards Institute.
- There are several versions of the C++ standard:
1998, 2003, 2011, 2014, 2017, 2020.
- This class focuses on C++ 2017 (alias C++17).
- It’s too soon for C++ 2020.
- I’ll let you get away with anything that g++ permits on the
Linux lab computers, however.
- g++ implements extensions to the C++ standards.
- Handy, but dangerous. It’s easy to produce non-standard code.
- For almost everything that you turn in, you will provide
a control file (
CMakeLists.txt
or a Makefile
) that can
determine which version of C++ you want to use, via a g++ option.
Specify the version that you want to use.
- For other situations, assume C++ 2017.
Standard
An HP co-worker, Donn Terry, used to say
“Standard is better than better”. This meant that doing something in
the standard way is superior to doing it in a non-standard way, even if
the non-standard way yields better results. True enough, as far as it goes.
If all you know is Australian English, thick with local slang, you’ll
have a difficult time being understood in Detroit. Knowing
Standard English can be useful.
I want you to learn standard C++. That way, your programs will work
everywhere, on any standard-conforming compiler. If you use
compiler extensions, non-standard features, then your program will work
on that particular compiler, but perhaps not on others. Not so
good.
C++ is C
When C++ was being developed, C compatibility was very important. It
still is. There are zillions of
C programs out there, and the creator of C++ wanted it to be very easy
to take a C program and turn it into a C++ program.
Therefore, C++ is just about a superset of C. This means that almost
all C programs are C++ programs.
Valid C & C++
This is a valid C program, and a valid C++ program:
#include <stdio.h>
int main() {
printf("Hello from C!\n");
return 0;
}
Hello from C!
#include <stdio.h>
int main() {
printf("Hello from C++!\n");
return 0;
}
Hello from C++!
printf() is as much a part of C++ as int and while.
97.905%
of C programs are valid C++.
C++, not C
![](https://commons.wikimedia.org/w?title=Special:Redirect/file/Badger_laying_on_ground._-_DPLA_-_0335977b4d1504edc799834081ca4fd5.jpg&width=400)
It’s the Bad Code Badger !
This is a valid C program, but not a C++ program,
because C++ claimed class as a keyword:
int main() {
int class = 253;
printf("C: %d\n", class);
return 0;
}
C: 253
int main() {
int class = 253; // 🦡
printf("C++: %d\n", class);
return 0;
}
c.cc:2: error: expected primary-expression before ‘int’
This is a rare exception.
Better C++
Sure, it’s better C++ style to do the first program like this:
#include <iostream>
using namespace std;
int main() {
cout << "Hello, world!\n";
return 0;
}
Hello, world!
However, that doesn’t change the fact that the first program is C++.
A Final Note
- Despite all that, I don’t let you use certain C facilities
(printf(), malloc(), etc.) in this class.
- You must use the corresponding C++ facilities (cout, new).
- I feel no guilt about this.
- You’re too comfortable with printf(), so, if it were up to you,
you’d never bother to learn cout.
- It’s like removing the training wheels from your kid’s bicycle.