A function definition is comprised of a function header and a function body. In this lecture, we'll learn how to implement the function headers for the four different kinds of functions, so what information does the function header give us? It tells us the data type that the function returns, it tells us the name of the function, and it tells us what information we need to pass into the function when we call it. Here's the syntax for a function header, so we have a return type, and then we have the function name. Then we have an open parenthesis, and we have a comma-separated list of parameters where as a minimum, we provide the data type and the parameter name for each of those parameters. We sometimes add another word, but we'll get to that when we get to that, and then finally, we have the closing parenthesis. There are four different kinds of functions, a function that has no return value and no parameters. A function that has no return value and does have one or more parameters, a function that has a return value but no parameters and finally, a function that has a return value and one or more parameters. Let's go take a look, here's our starting code for this lecture and as you can see, there's not much going on here. We just have the usual stuff up top, and then within our main function, we say we're going to call all four functions and that is a lie for this lecture, but it will be true in the next lecture. In this lecture, we want to develop the function headers for the four different kinds of functions. I'm going to start with the simplest form of all, it doesn't return anything and it doesn't require any parameters. When we have a function that doesn't return anything, we don't provide an actual data type, we provide the keyword void, and that tells the compiler that this function doesn't return anything. I'm going to say that this function prints a message and we don't get to decide what that message is, so we're not providing any perimeters to tell this function what message to print, it will just print whatever we've implemented for the message. I'm going to put an empty body in here so that we can get our function to compile and I'm also going to add a comment at the top of our function, and this comment will just say, prints the message "Hi, noob." That's a nice message to print, so this will print the, "Hi, noob," message when we call this function, I can compile this code and as you can see, the build succeeded, so that's it for our first function header. We provided the data type that the function returns, which is often called the return type, we provided the name of the function. We always need to put an opening, closed parenthesis when we're defining a function, so we need that in the function header and within the open and closed parentheses, we put the parameter list, which happens to be nothing because there are no parameters for this function. Let's actually give whoever wants to print a message a little more control over what gets printed, so again, we'll have a function that doesn't return anything. But I'll call this one, prints provided message. and I'm going to have a parameter here, and we haven't talked about strings yet but I'm going to pass in a string and I'll call it the message. Of course, I need two columns here, so we've actually been using string literals when we've been providing output to standard C out. But this time we'll actually pass a string literal in here for the message. Now that I've clicked elsewhere, the compiler isn't giving me any red squiggles anymore, so that's good, I'm going to add a comment and this one we'll say prints provided message. The documentation comment also says, well, there's a parameter here, so I'll mark it so that the documentation generator will pick this up in the documentation. Here's the parameter name that matches over here and I'll just call it message to print. I'll compile again and the build succeeded again, so we're halfway done with the function headers that we're writing in this lecture. The next one, we'll have actually return something, so now we have a non-void return type so this function will return an integer and I'll say get random number. But we won't provide any parameters and I'll provide the empty body of this function and I'll say that this function gets a random number between zero and the maximum, and I see I'm going to have a long comment here, integer minus 1. So we won't have any control over the range of the random number we get, we know we can control the range of a random number we get because we did that when we were implementing the die class in the console app classes lesson. But here we're going to just get whatever random number we get between zero and the maximum integer in C plus, plus, minus 1. I'll just say this function returns a random number. The final function we're going to write will again give the person calling the function so more control over what they get for the print provided message, it was more control over what got printed here will be more control over what random number they get. So I'll say int because we're still going to return an int from this function and I'll say get bounded random number, and I'll let the caller of the function provide a max value for the number they get. In my comment, return a random number, I'll just use the same terminology as I said above, so get a random number between zero and max value minus one. Here in the description of the parameter, I'll say exclusive upper bound and for the return, I'll say a random number. I actually forgot to compile after I wrote this function header and provided the empty body and I'm going to actually have a problem in both of these last two functions when I try to build. So these errors say that those two functions that I said would return a value, actually have to return a value. I can't actually compile with empty function bodies for these two functions because I promised I'd return something, so the compiler insists that I return something. I'm not actually going to implement these function bodies with correct functionality, I'll just say they each return negative one. If we ever actually got a negative one from one of these functions, it would be obvious that this was incorrect because the number is supposed to be between zero and some upper bound. I can now compile against successfully, so we're done writing the function headers for the four different kinds of functions. To recap, in this lecture, you learned what information a function header provides and you learned how to implement function headers for the four different kinds of functions.