Show Lecture.Introduction as a slide show.
CS253 Introduction
Bjarne Stroustrup presents C++ to the Founding Fathers
Things you need to know
Do I look like your mother?
- A few facts that you must know to survive in this class:
- E.g., Latin “exempli gratia”, literally, “free example”, means “for
example”.
- I.e., Latin “id est”, literally, “it is”, means “in other words”.
- Emit means “produce”. Fires emit smoke.
Emit ≠ omit.
- ISO 8601 says that 2024‒11‒21 means November 21, 2024.
- Learn to read documentation: if, getopt, cp.
- Avoid Canvas messages. Send email.
- Don’t send images—nobody likes your font/colors. Copy & paste text.
- Late is late. If it’s due at 10:00PM, then
10:00:03PM is late. If that doesn’t work for you,
pretend it’s due at 8:00PM.
- If what you turn in doesn’t unpack and build, you get no
points.
- If it can be easily fixed, worked on your computer, you worked
really hard on it, and you need to pass for your scholarship:
no points.
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
Preferences
- Which is better, Java or C++?
- Which is better, a coat or a hot meal?
- Which is better, Russian or Japanese?
- Who was better, Isaac Newton or Siddhartha Gotama?
Dialects
- In this class, we’re learning C++, not g++.
- g++ is a particular implementation of C++.
- There are other C++ compilers: clang, Microsoft Visual Studio, etc.
- Similarly, there are many dialects of English, Spanish, French, etc.
Standards
- So, what is C++, then?
- How do we tell what’s real C++ and what’s a dialect?
- How do know anything?
- Some things, we can determine through direct experiment.
- For things that are more definitions than facts, it’s a
question of consensus. “Dog” means 🐕 because we agree on
that.
- Says who? Mom? Your next-door neighbor? The President?
- We usually rely on an authority: a dictionary, the law, a committee,
scholarly consensus, an influential leader, etc.
Authorities
Let’s try some simpler questions:
Who’s the best pop singer?
- Beyoncé.
- Says who? The BeyHive.
When is the holiday Washington’s Birthday?
- The third Monday in February.
- Says who? The United States Congress.
Is Pluto a planet?
- No.
- Says who? The International Astronomical Union.
How long is a meter?
- 1/299 792 458 light-second.
- Says who? The International Standards Organization.
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.
- This class focuses on C++ 2017 (alias C++17).
- 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.
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.
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.1810771651% of C programs are valid C++.
C++, not C
This is a valid C program, but not a C++ program,
because C++ claimed class as a keyword:
int main() {
int class=0;
printf("C: %d\n", class);
return 0;
}
C: 0
int main() {
int class=0;
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.