This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
haas:spring2014:cprog:projects:helloworld [2014/01/12 18:18] – [Executing your compiled program] wedge | haas:spring2014:cprog:projects:helloworld [2014/01/27 14:58] (current) – [Verify submission] wedge | ||
---|---|---|---|
Line 1: | Line 1: | ||
+ | <WRAP centeralign round box> | ||
+ | < | ||
+ | < | ||
+ | </ | ||
+ | |||
+ | ~~TOC~~ | ||
+ | |||
======Hello, | ======Hello, | ||
Line 70: | Line 77: | ||
As we are to be focusing on learning a particular language this semester (C) | As we are to be focusing on learning a particular language this semester (C) | ||
- | Following is the layout of a typical single-file C program: | + | Following is the layout of a typical single-file C program |
<code c> | <code c> | ||
Line 126: | Line 133: | ||
It isn't difficult, but needs practice to develop this skill. | It isn't difficult, but needs practice to develop this skill. | ||
+ | =====Preparing a source directory===== | ||
+ | Every user on lab46 has their own **src/** subdirectory where they can place files generated through coursework. | ||
+ | |||
+ | The purpose of directories is mostly a human satisfying of sanity through organization. While there are mild performance implications, | ||
+ | |||
+ | For this reason, we are going to take one more step and create a custom directory for this class (so you can re-use your **src/** directory for additional classes and pursuits). | ||
+ | |||
+ | You can name it whatever you want... for this example I will be running with the name " | ||
+ | |||
+ | ====Change into src/==== | ||
+ | First step, we need to change into our **src/** directory (note the prompts): | ||
+ | |||
+ | <cli> | ||
+ | lab46:~$ cd src | ||
+ | lab46: | ||
+ | </ | ||
+ | |||
+ | ====Create a cprog subdirectory==== | ||
+ | Now, we're going to create a directory just for our C/C++ program files: | ||
+ | |||
+ | <cli> | ||
+ | lab46: | ||
+ | lab46: | ||
+ | </ | ||
+ | |||
+ | ====Change into your cprog directory==== | ||
+ | Once created, we can change into it: | ||
+ | |||
+ | <cli> | ||
+ | lab46: | ||
+ | lab46: | ||
+ | </ | ||
+ | |||
+ | and voila! If you remember to change into here each time you come to class, or set about working on coursework, all your C/C++ coursework will be nicely organized here (you do not need to recreate the cprog directory-- that only needs to be done once). | ||
+ | |||
+ | And, for those really embracing these provided resources, feel free to create additional subdirectories to further organize your code. We'll be creating a lot of programs in here, and even this mild organization isn't enough to ward off a little searching later in the semester as the example programs pile up. | ||
+ | |||
+ | =====Text Editor===== | ||
+ | Text editors can be a matter of great personal preference. | ||
+ | |||
+ | Ultimately, they are a fundamental program development tool, for they handle the various low-level file operations, enabling you to place desired content in specified files. | ||
+ | |||
+ | If you are entirely new to lab46 (and don't know any better), I would recommend the use of the **nano** text editor. It works in a manner consistent to other text entry programs you are likely accustomed. | ||
+ | |||
+ | To open **nano** on a new or existing file, merely specify the file name after the editor on the command-line. In this example, we will be creating a new file called **hello.c** in our current working directory: | ||
+ | |||
+ | <cli> | ||
+ | lab46: | ||
+ | </ | ||
+ | |||
+ | nano is a full screen editor, you'll notice a status bar on the top of the screen, and commands listed on the bottom few rows (< | ||
+ | |||
+ | If you have experience in UNIX on the command-line and know of/prefer other editors, feel free to use them. | ||
+ | |||
+ | For those also taking UNIX, you'll be learning the **vi** text editor, and I would encourage you to use it in as many settings as possible to aid you in your UNIX coursework (if you are not taking UNIX do not concern yourself with **vi**, it is a powerful editor that works according to a different philosophy). | ||
=====Hello, World====== | =====Hello, World====== | ||
For our purposes here, we will be writing our first program, which is also considered a classic. | For our purposes here, we will be writing our first program, which is also considered a classic. | ||
Line 189: | Line 251: | ||
* http:// | * http:// | ||
- | The nature of compilers themselves can warrant entire courses unto themselves. If you go on in Computer Science, at the 3rd/4th year or graduate level it is not uncommon to encounter " | + | The nature of compilers themselves can warrant entire courses unto themselves. If you go on in Computer Science, at the 3rd/4th year or graduate level it is not uncommon to encounter |
+ | |||
+ | ====Familiarize yourself with file states==== | ||
+ | Before we get to actually compiling, you may want to take a look at the existing state of your working directory, so that you can see the results of your actions. | ||
+ | |||
+ | At this point, you should have just finished typing in your first program (**hello.c**), | ||
+ | |||
+ | < | ||
+ | lab46: | ||
+ | </ | ||
+ | |||
+ | At this point we are going to run the UNIX command **ls**, which will list all the files in the current directory (your **~/ | ||
+ | |||
+ | < | ||
+ | lab46: | ||
+ | hello.c | ||
+ | lab46: | ||
+ | </ | ||
====Compile the program using gcc==== | ====Compile the program using gcc==== | ||
The compiler on Lab46 is the GNU C compiler (**gcc** command). | The compiler on Lab46 is the GNU C compiler (**gcc** command). | ||
- | To use it on a single file, in this case named **hello.cc**, to create an executable named **hello**, we would run the following at the prompt: | + | To use it on a single file, in this case named **hello.c**, to create an executable named **hello**, we would run the following at the prompt: |
<cli> | <cli> | ||
Line 208: | Line 287: | ||
Running the **ls** command before and after running **gcc** should show the lack and then presence of the executable. | Running the **ls** command before and after running **gcc** should show the lack and then presence of the executable. | ||
- | |||
=====Executing your compiled program===== | =====Executing your compiled program===== | ||
At this point you should have written your first program in a text editor, saved it, compiled it successfully, | At this point you should have written your first program in a text editor, saved it, compiled it successfully, | ||
Line 226: | Line 304: | ||
Now we just have to learn all the various keywords and language rules, and familiarize ourselves with the necessary library functions to pull off even more spectacular solutions to problems. | Now we just have to learn all the various keywords and language rules, and familiarize ourselves with the necessary library functions to pull off even more spectacular solutions to problems. | ||
- | You may want to place your C source code (**hello.c**) in a repository for safe keeping- working with repositories is another helpful programming habit to have. | + | You will want to place your C source code (**hello.c**) in a repository for safe keeping- working with repositories is another helpful programming habit to have. |
+ | |||
+ | =====Submission===== | ||
+ | To successfully complete this project, the following criteria must be met: | ||
+ | |||
+ | * Code must compile cleanly (no warnings or errors) | ||
+ | * Executed program must display the intended message, exactly as presented, to STDOUT. | ||
+ | * Output must be correct (as per project specifications) | ||
+ | * Code must be nicely and consistently indented (you may use the **indent** tool) | ||
+ | * Code must be commented | ||
+ | * have a properly filled-out comment banner at the top | ||
+ | * have at least 5% of your program consist of **< | ||
+ | * Output Formatting (including spacing) of program must conform to the provided output (see sample program output above). | ||
+ | * Track/ | ||
+ | * Submit a copy of your source code to me using the **submit** tool. | ||
+ | |||
+ | To submit this program to me using the **submit** tool, run the following command at your lab46 prompt: | ||
+ | |||
+ | < | ||
+ | $ submit cprog helloworld hello.c | ||
+ | Submitting cprog project " | ||
+ | -> hello.c(OK) | ||
+ | |||
+ | SUCCESSFULLY SUBMITTED | ||
+ | </ | ||
+ | |||
+ | You should get some sort of confirmation indicating successful submission if all went according to plan. If not, check for typos and or locational mismatches. | ||
+ |