#include<stdio.h>
int main(void){
printf("Hello, C!");
return 0;
}
C is the backbone of Unix systems. That’s cool. Currently the only project I really have going in C is RML. The Operating Systems course uses C to teach about processes and threading.
Farily certain I just bombed an interview for IBM, so there’ll be a lot more added to this page in the coming weeks as I read Cracking the Coding Interview.
To run C programs, it is best not to use an IDE. To get a feel for how things fit together, it is best to use the following tools:
Tool | GNU/Linux | Windows | MacOS |
---|---|---|---|
Text Editor | Gedit, Vim | Notepad++ | TextWrangler |
Compiler | gcc | MinGW cc | xcode cc |
A debugger like GDB is also recommended.
Hello World is an excellent first example to demonstrate some key properties of C programs:
#include<stdio.h>
int main(int argc, char** argv){
puts("Hello, World.");
return 0;
}
Headers allow the use of functions from libraries.
#include<stdio.h>
The main function must be present in every .c file, and is the point where the program will begin to run.
int main(int argc, char** argv){
Puts is short for put string
puts("Hello, World.");
Return 0 indicates that no errors have occured, and that the program is finished running.
return 0;
}
C uses char*
, a pointer to a list of characters with the final character being the null terminator.
puts("string");
is sufficient for most string-output.
printf("string %f", flt);
- printf is required for inserting data into strings. Data can be represented in a variety of ways with %
notation.
C allows the manual storage and manipulation of memory addresses. Using the pointer (*
) and address (&
) operators, a programmer can create programs that minimize copying, with heavy emphasis on modifying arrays in the memory in-place. This lower, more complex level of control enables faster algorithms and interesting hacks.
// A pointer is the same size as the type declared.
int y = 32;
int * yptr;
yptr = &y;
// Run:
y -> 32
*yptr -> 32
yptr -> A3BC3AF8
The fork()
call can be used to split a running program into seperate processes. Calling fork()
returns the PID of the child to the parent, and 0
to the child.
The pipe()
call (which requires a int pipeinfo[2];
to point to,) creates a pipe that can be used to forward date to and from child or executed processes.
I’ve found the following very useful when I accidentally start a child process that I forget to kill:
ps -A | grep {name}
kill -9 {pid}
CC BY-SA 4.0 - This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License. You are free to share, redistribute and adapt the material as long as appropriate credit is given, and your contributions are distributed under the same license.