Files
hpr-knowledge-base/hpr_transcripts/hpr1768.txt

266 lines
22 KiB
Plaintext
Raw Normal View History

Episode: 1768
Title: HPR1768: An Intro To C Episode 1 : Introduction and Types
Source: https://hub.hackerpublicradio.org/ccdn.php?filename=/eps/hpr1768/hpr1768.mp3
Transcribed: 2025-10-18 09:05:00
---
This is HBR Episode 1768 entitled, An Intro to Sea Episode 1, Introduction and Types,
and in part on the series, Programming 101.
It is hosted by first-time host CKM and in about 32 minutes long.
The summary is, I go through the basic types and the basic introduction of myself.
Colin.
This episode of HBR is brought to you by AnanasThost.com.
Get 15% discount on all shared hosting with the offer code HBR15, that's HBR15.
Better web hosting that's honest and fair at AnanasThost.com.
Alright, hi, my name is Colin Mills or you might know me as C.J.
I did a show not too long ago, probably in September of 2014 for Hacker Public Radio
and it was how I found Linux, but unfortunately that was under a different alias.
So that was under Gofer and some might ask me why I switched.
I just felt that CJM was more or less where I fit in terms of how I feel like my initials
really do identify me more than a Gofer does.
And to be honest, it was more or less a pawn, you know, so go for NYX.
So that's enough about me, actually, maybe if you want to find where I'm at, I frequent
the NYXer forms quite a bit and the Arch Linux forms, so you can find me there.
Okay, now that's enough about me.
Alright, okay, so let's get started, where are we going to begin?
I'd just like to maybe talk about the show I'm looking to present, I'm looking to present
an introduction to the C programming language.
Now you might be wondering because this has been done forever and ever and ever, I mean
there's so many things, you got the K&R book, you've got all of these different resources
out there, you've got umpteen video tutorials on YouTube, but the big thing about me is
it's more or less a learning exercise because I don't know who said it, I'm sure there
was some big philosopher, but if you can explain something to someone else, then you know,
you know, you know, better yourself.
So I hope to provide a platform for beginners that they can go to and you know, just talk
about C in terms of, hey, here's this language, would you like to learn it?
And I hope I'm an adequate teacher for what I'm looking for.
Now there's a big thing we have to remember, I am still only a first year software engineering
student.
I've built quite a few things in C, I've built a chat program using sockets, I've built
a word game using, well I was actually using C++, but that's a whole other story.
Now there's another big thing about my background, you have to kind of remember, I'm a big
Unix guy, so I'm really into Unix and I'm into open source and I'm really a big promoter
of that.
So in terms of C versus any other languages, I like to keep the philosophy simple and I
also like to follow a specific, the specific Unix philosophy itself.
So what is the Unix philosophy?
Well it says create one tool and let that tool do everything, do one thing well, right?
And then make everything around it in terms of, okay, I want to read my PDFs, well I should
have a tool that converts my PDFs before I read them and then another tool to read them
or maybe that was a bad example, but we could use word processing.
That's a good example.
So if you're word processing, okay, so you have one tool to actually write, you have another
tool to maybe modify the text in terms of bold and italics and it's just a great philosophy
that means make one small part, a great part and then in terms of that, make that one module
will fit together in a bigger ecosystem.
So I really, I personally agree with that as a programmer it makes sense to me.
So let's get started shall we, this is enough rambling on, I contend to ramble sometimes.
So I've explained who I am, you know, I'm a big, I'm a big Unix geek.
So that's, that's the way to go.
So just so we start off on the same page, we should probably get maybe the history of
C and if you look in the show notes, I've got, I hope I've got some adequate documentation
that you can use if you ever need to look things up and I mean the internet is your best
friend.
A lot of these notes are just culminated from the internet so I mean whatever you would
like to use, I would definitely go to the internet first but hopefully my notes can kind
of help you out with making sure that you have at least some place to start to look.
So I have the history of C here.
So who was C originally developed by, it was developed by Dennis Richey between the years
of 1969 and 1973 at AT&T Bell Labs.
So that's a pretty big one.
They also created Unix.
So C was created before Unix or maybe even during the process of creating Unix and the
reason it was was because Richey really needed a systems programming language that was robust
enough and that could reach enough platforms and maybe even on the PDP 11, you know, which
is where they originally developed the Unix operating system and he needed to be able
to create a language that was more or less higher level than assembly language because
who really wants to write an OS in assembly and also just provided a robust API to be
able to do small things or big things in terms of memory allocation and just a lot of
features that were very much both new at the time and a little bit revolutionary.
So AT&T Bell Labs has a really good reputation in terms of kind of pushing the boundaries
and C was one of the most, I would argue that C was one of the most revolutionary parts
of our modern computer history without C wouldn't have even all the things that you have.
So when you think about that, I personally, as myself, I think that Richey and Kernahan
and Rob Pike, I mean those are the pioneers of our computer generation so that's where C came
from and the most important part was that it was provided to be one of the most high level in terms
of the time. So if you look at C right now, there's a lot of people that say, you see, I don't want to
have to deal with that because there's no automatic garbage collection so you have to do all your
memory allocation yourself. It's kind of like walking to Toronto. Why would I walk to Toronto when I
can take a car? Well, it's really important to you see in situations where you need to have
the precision of walking. You know, a good way to put it is maybe if I'm going to longitude and
latitude in a car, it's really hard to get a precise location. But if I'm walking, I can get there
right? So I, to be honest, I'm not very familiar with longitude and latitude and I hope that's
an adequate example. But I think having that precision of going to that specific place
is really important and C gives you that opportunity. If you treat, if you treat your computer's
memory like a map, you can go anywhere the hell you want using C. So where is C mostly used?
A lot of embedded applications. So if you look at Roger's boxes, if you look at
I'm from Canada. So if you look at your television providers boxes or if you look at any embedded
software traffic lights, I mean C kind of runs our world in a lot of ways. So
it's also used. I mean, every OS is written in C. Look at windows, look at Unix, look at
you know, and and I think that really just kind of shows the robustness of C, right? Because even
right now, if you look at open BSD, free BSD Linux, the whole, every kernel is written in C.
And what's that? That's like 60 years in the making or 50 years in the making. Sorry, excuse me,
it was 1969. So I'm not going to do the math right now. I don't, it's something probably 50 to 60
years. Sorry, I'm just kind of focused on talking here. But I mean, it really does show the
maturity of the language. And personally, I mean, it really shows how well the APIs were developed
and how needed it actually was if we're still using it. And there's a lot of people that would
argue that there's other solutions. And I mean, there are, but in another way, um, C's been here
forever. And I mean, you've got your C sharp, you've got your, you've got your Python, you've got
your Ruby. But I mean, those are kind of come and go languages. C has stayed here throughout the
ages. So maybe that's, maybe I'm a little bit biased because I am so unix oriented. Maybe
that's my problem. But either way, that's my opinion. And that's why I chose C to teach you.
Now, once again, just maybe to preface this a little bit. I am nowhere near a master. I have had
to do a lot of Googling. I've had to do quite a bit of things just to prepare some documentation for
this. Um, and I mean, that's, that's that. But overall, I think that you can't really take my word
as, as perfect, but you can take as close as it can be, right? So I, uh, I really hope you enjoy.
Let's get started learning the C language. And what kind of types are in there? Okay. So
we're talking about types. Now, what is a type? When you're talking about a computer programming
language, you've got this thing called the variable. Now, in some languages, higher level languages
than C, you've got something that's called, uh, interpreted language, which means, okay, I can,
I'm going to type in this command and run it. So that's how Python works. If you look at Python's
architecture, you have a .py file. And the interpreter runs through that file and executes all the commands
in there. And that's how you program in it. Now, there's a different type of language. And this
is called statically typed. Um, sorry. Uh, if we go back to the Python example, we're, uh, we're going
through this file and line by line, we're interpreting it as such language variables are not statically
typed. There's something called dynamically typed. So what does this mean? It means, okay,
if I have the variable X variable X could be a number, it could be a character, it could be,
you know, directions to two, two, Tim buck two, it could be anything. It wants to be. And there's
no restrictions based on that. Now, C is of the different types. C is of something called
statically typed language. That means to use variable X or variable Y or variable Z,
we have to define what those are before we use it. As such, we use types to define what type of
variable is. So it's actually pretty simple. Um, there's only a few core types. And there's a
couple things that, uh, that we have to go over when it comes to types. So the first thing is,
you're going to, you're going to hear me talking about signed and unsigned. So what does
signed means? What does signed means? Sorry. It means it can hold either a negative or a positive
value. So that means that my, my variable, whatever it is, if it's a number, it only, it actually only
applies to real numbers. But I'm going to be talking about integers. Okay. And integers can either
be signed or unsigned. So signed means it can hold either negative or positive values. And unsigned
means it can only hold positive values. Now, that's the very basics. Now I've, I've included in
the show notes a Wikipedia unsignness. And I mean, you can go really into the bits and you can go
to two compliments and do all of these different things. But for our purposes, I'm just going to say
that. Okay. So what kind of types do we have? We have an int. So an int is a variable that is at
least 16 bits in size. Um, it is actually the most efficient for the processor itself. So if I
compile on a 32 bit machine, then my int will be 32 bits or four bits. Sorry. If I, uh, compile on
a 64 bit machine, it will be a different value. So basically when the compiler goes through and
starts to compile, um, my program. So as I said, with the interpreted languages, um,
sorry, I'm going to just backtrack a little bit for, uh, from my integers. Okay. So I'm, I'm
going to go back one step. I apologize. I got a little bit ahead of myself. But I'm going to say
continue with my interpreted versus compiled languages. So as I said, C is statically typed.
That means we have to define our variables and the compiler, what is called the compiler,
is it goes through, it goes through the process, it compiles down to object files and then those
linked together into your executable. So every time we change a C program, we have to, um,
recompile. So coming back to the int, when, when we compile through this program,
an int is actually compiled down to the most efficient size for the processor itself. So, uh, yeah.
So on a 32 bit machine, I can tell you, uh, it's four bytes in size because that is the most
efficient, um, for a 32 bit and it's capable of storing. According to Wikipedia, it's capable of
storing negative 32,767 to 327, uh, 32,767 once again. Okay. So if I apply the signed to this,
that means that it could hold that whole range. Okay. That means it can hold either negative or
positive values. If I put unsigned into it, it means it can only hold from zero to 300,
or 32,767. Sorry again, um, about those mishaps. Okay. So again, we have another thing called
specifiers. Now, now, what are, what are in specifiers? Now, um, they're, they're basically a way to show
the size or the amount of an integer you're holding. So if you have a short, um, that's 16 bits in
size. So that means, okay, I have a short in germ, not holding a large number. Okay. And then there's
another one called a long. A long is 32 bits in size. And a long, long is 64 bits in size. So if
you're looking at the show notes, I've got some quite interesting code snippets there.
And, uh, yeah. One important thing again is that these types can actually be used on their own.
So I could say, I want a short, okay, or I want a long, or I want a long, long, and you could
actually define variables that way. Or you could go, I want a short int, I want a long int,
I want a long, long int. Okay. If that makes sense. Okay. So a char. This is our second data type.
So we went through an int. And we now know what an int is. So we have a char. Uh, a char is actually
one byte in memory. So that's eight bits. It holds a character, but also can hold a number. So one
important thing to note about C, um, that's a little bit different than most languages. Um,
is that characters are actually just numerical values. So if you look at something called the
ASCII table, which is, I included in the show notes, it's got a mapping of all characters that
it can look at. And, um, now I'm just going to stick with the simple character set, which is the
ASCII. I mean, there's, there's different ones. There's the UTF and all of these different things.
But for our purposes, I'm just going to say you have your, uh, specific values, uh, dictated in
the ASCII values are in the ASCII table, sorry, that correspond together. So for instance, um, A is,
let me just do a little quick Google search for ASCII table here. So,
sorry about this. Okay. All right. Um, okay. So for instance, we have lowercase A.
Lowercase A is 97. So if I did a, uh, if I went to print 97 to the screen as a character,
it would be A or the same could be said for printing A as a decimal or an integer, sorry, and it would be,
uh, 97. Or yeah. So it, it all just works out. So that's one important thing to note about the ASCII
table. Um, now what else could we look at here? We could look at a couple other things. So our
char is basically just a way of denoting, like the char name itself is just a way for the programmer
to know that this is a character, you know. Um, and it's really important to know that
char's, you, you define a character using the single quotes around it. So if I, I can make a, uh,
char variable that held the letter X with single quotes around it, or I can make a char value
that held the number 72. So like I said, they're just numerical values. Now what else do we have here?
We have floats. Now one or big, now float floats, uh, they hold as the name suggests, floating point
numbers. Okay. So floating point numbers, they're a little bit iffy when it comes to programming
languages. I don't know if you've had any experience with them, but especially when you get low level
as, as low level as C is, floating point becomes a little bit more risky and, uh, it becomes a
little bit harder to use overall. Um, but you can, you can have floating point numbers in a float
and support is becoming much more available for that. So if you compared it to from now until like
75 or however many years, you know, it's our, our improvement for floating point has definitely
got better with GPUs and whatnot. So not, it's not really as big a concern right now. So, uh,
floating point as the name suggests, you just define float with X equals, uh, 72.2 or whatever
the case may be. Uh, now a double is like a float, but it can hold a larger value. So those are
your forming types in C. You've got your int, you've got your char, you've got your float,
you've got your double, and there's a couple other things that I want to talk about. Now,
what are arrays? Now arrays are a very important subject in C, especially because, uh, arrays are
basically collections of multiple things. And they have to be a set size. So when I'm defining an
array, I put the data type and then I put a space and then I put the name of the array. So in this
case, I'll call it array of numbs. Okay. And then I put an opening square brace and then the number
of things I want to store. So if I want to store a hundred inns within this array, then I put the number
a hundred. And then I close that brace and then I hit the semicolon. Oh, that, I guess that would
be an important thing. I don't have it in my notes. Um, to end a line as such with English,
you would use a semicolon. So anything that we're doing, we're using a semicolon for. Okay. All
right. So it'll be almost like writing a sentence and putting a period at the end. You throw a
semicolon on the end and you're telling the compiler this line is finished. Mr. compiler,
you can go ahead and move on to the next one. Okay. So back to arrays. I'm sorry. I'm a little
scatterbrained, but like I said, we're just moving along with this. So I'd like to get some feedback
on my show overall. So if you wouldn't mind taking the time, that'd be great. So we're array,
back to arrays. Arrays are collections of multiple things. Uh, they have to be a set size. So if I
want to say I got to, I got a hundred arrays of numbs or a hundred inns, a hundred numbers within
this array or a hundred integers within this array, then I have to say 100 in the declaration.
Now I can't change the size. I can't go around adding 101, 102. Um, and that's the most
important thing there because you know, memory is not willy nilly. I can't just throw blocks of
memory around like it's Minecraft. I've got to uh, make sure that my memory is protected where
it needs to be protected. And then I'm using the best thing possible in terms of how I uh, how I
uh, make sure my memory isn't being uh, treated like it's just something to throw away. And that's
the difference between a garbage collected language and this sort of language. So in most
languages, there are something called strings. Now if we use this concept of arrays that we just
learned, we can say that strings, um, we can say that what are a string mostly like what in
terms of understanding what a string is. Well, let's think about it for a second because we've got
our, we've got our char data type, which is just a character. So then a string. So the name
call in mills, for instance, well, isn't that just an array of char? I mean, it's a multiple set
of char's. Okay. So then in C, uh, strings, and I have strings and quotes in the show notes,
um, are made up of multiple char's. So, um, if you think about it, it really does make sense.
Um, an important thing to note about this is that as with any array, you can't go messing
around with the, with the numbers of things in that thing. So you can't be like, oh, my string
actually needs an extra character. So I want that string to hold, uh, call in mills,
R, R on the end. No, that can't happen. When you define a string in C, it's got to be, uh,
it's got to be a fixed size. Now there's an important thing that determines for the compiler to
know when that string is finished. And that is the null termination. Um, so the null termination
is a slash zero. So I've got, uh, I've got it here, but it's, it's a slash zero, okay?
And that slash zero, it tells you that, uh, the string is finished. It tells the compiler,
this string is finished. I don't, uh, this is where I want to end the memory that I'm using here.
And it's added to everything as such. Um, it's really best to, well, it's not best. It's a must
to define your strings with an extra character on the end to hold the null termination,
because that's added every time a string gets defined. So that's really important to know. Okay,
I'm just going to take a sip of my coffee here.
At the null termination comes up to the end. Okay. So we don't want to go past this null termination.
Okay. So I know that it was kind of a whirlwind tour through the sea types.
And I mean, I probably could have recorded this a little bit better,
but I'm doing this as a test run and to make sure that I, I know what I'm doing and make sure
I want to continue this because I on, I personally do. I enjoy podcasts and most of all,
I enjoy listening to podcasts. And, uh, I mean, HPR is run by people like us. So I want to be
part of that movement, obviously. Um, so I will be back in the next couple days, probably.
I will actually, I don't know when you'll be listening to this. So I'm going to record,
let's say the date is, uh, the sixth of May. I'm going to record a couple episodes
for the rest of this week and we'll have a good old time. Next time, I'm going to do maybe a
little bit of a recap through, uh, through some types and make sure we understand that. And then
we will go into, um, control flow because that's really important. So, um, yeah. Thank you very
much for listening to my rambles, but, uh, I hope you have a great night and I really do appreciate
it. Okay. All right. Until next time. Keep on, uh, keep on seeing. Bye.
You've been listening to Hacker Public Radio at Hacker Public Radio. We are a community podcast
network that releases shows every weekday Monday through Friday. Today's show, like all our shows,
was contributed by an HPR listener like yourself. If you ever thought of recording a podcast,
then click on our contributing to find out how easy it really is. Hacker Public Radio was found
by the digital dog pound and the infonomican computer club and is part of the binary revolution
at binrev.com. If you have comments on today's show, please email the host directly, leave a comment
on the website or record a follow-up episode yourself. Unless otherwise status, today's show is
released on the creative comments, attribution, share a life, 3.0 license.