From JS to C

How to run C

Go to your terminal, run > gcc ./filename.c. It compiles to a .exe or .out binary file. Then just type ./a.exe.

The main function

Put the code you want to run first and sequentially in a function called main.

    int main(void)
      /* code */
      return 0;


You must specify the return types and input types of a function upon declaration. Instead of “function”, just write the return type. Void if no return, and also void if no inputs:

    int test(int a)
      return 0;

    void test (void){}
You call functions in the same way as in JS. However, the number and types of arguments passed must match the parameters.
If you want a variable number of parameters:

    int test (int a, int b, …){
      return 0;
The parameters and return value can be any type, like an array:

    void test(int a[100], int b){}
Like Javascript, C will make a copy of the arguments passed into a function, to protect the original. Also like Javascript, there are some exceptions such as Arrays.


    printf("Hello world\n");
Use %i to insert an int into the print string:

    printf("Number: %i\n", 5);

Including other files

    #include <stdio.h>

Using variables

Instead of "let", put the type.

    int sum = 5;
    sum = 50 + 25;
    int declared_not_used;

Variable types

Change type of a value with casts:

    float decimal = 42.3;
    int num = (int) decimal;
You can also define symbolic constants, which are handled at compile time

    #define ANSWER 42


      printf("%i", ANSWER);
These are really wack because they aren't really variables. They are as if you typed that exact piece of text:

    #define ANSWER 42); printf("Another statement!"


      printf("%i", ANSWER);


Same operators as JS. Nuances introduced because of static types.
Shorthand variable arithmetic works like in JS:

    i += 5;
    i *= 5;

Boolean operators

In C, 0 is falsey, everything else is truey. Boolean operators work the same as in JS:

    5 >= 3;
    3 != 4;

User input

    int number;
    printf("Insert a number: ");
    scanf("%i", &number);


The exact same as JS. for, while and do while work. break and continue as well.

Remember that if you define a new variable in the for loop, instead of let or var, you have to specify its type such as int:

    for(int i = 0; i < 5; i++){


Conditional statement

Same as in JS, including the normal if statement, the shorthand if and the switch.


Kinda like JS.
Nth element:

Declaring an array with 100 integers, defaulted to 0:

    int grades[100];
Initializing array with elements:

    int integers[5] = { 0, 1, 2, 3, 4 }
So repeating the length is redundant:

    int integers[] = { 0, 1, 2, 3, 4 }
Initializing array with only some elements, the rest will be set to 0:

    int integers[5] = { 0, 1, 2 }
You can even do this (creates a list with 100 elements, 1, 0, 0…, 0, 0, 42):

    int integers[] = { [0] = 1, [99] = 42 }
If you want a 2D array:

    int integers[2][2] = { {1, 2}, {3, 4} }
Actually, C knows the size of the array beforehand so you don't need the inner braces:

    int integers[2][2] = { 1, 2, 3, 4 }

Cool things to add infront of variable declarations

For example:

    const int number = 5;
  1. const
    • Same as JS, except it’s a “deep const”. For example, you can’t modify elements of an array initialized as const. Like applying Object.freeze on a constant variable.
  2. static
    • Only initialized once. For example, if initialized in a function, it won’t be deleted when the function call terminates. It’s value will stay for the next function call, and it won’t be re-initialized to the initial value.


Same as JS

Global variables

Any variable defined outside a function is global, and can be accessed from anywhere


Structures are like classes, but instead of assosiating data with methods, they just contain data. Declare a new type of structure like this:

    struct date
      int month;
      int day;
      int year;
Make a new instance of this structure (the initial values must be constant, not in terms of another variable):

    struct date today = { 2, 11, 2020 };
The { 2, 11, 2020 } is the value, which is casted into a struct date, and stored in today. You could also do the following:

    struct date today;
    today = (struct date) { 2, 11, 2020 };
As you can see, casting is perfectaly valid here as well.

Furthermore, this is cursed but it works:

    struct date tomorrow = { .day = 12, .month = 2, .year = 2020 };
You can also just leave some values undefined, which are defaulted to 0:

    struct date yesterday = { 2, 10 };
You can leave them all undefined:

    struct date today;
And access and edit the properties of today with dot notation:

    today.year = 2015;
Make an array of structs!!!!!!!!!

    struct date birthdays[3] = { {2, 11, 2020}, {9, 6, 2002}, {3, 14, 1592} };
You can skip the inner braces, as if this was a two dimensional array:

    struct date birthdays[3] = { 2, 11, 2020, 9, 6, 2002, 3, 14, 1592 };
If your brain is sufficiently massive, you can do this:

    struct date birthdays[3] = { [1].day = 11, [1].month = 2 };
You can make structures, with structures in them!

    struct event
      struct date start;
      struct date end;
Initializing an event is quite reminiscent of a 2D array as well:

    struct event planeRide = { { 2, 11, 2020 }, { 2, 12, 2020 } }
Making an instance of a struct can be summarized as:

    struct [struct type] [name];
Because of the fact that making a new struct type returns the [struct type], you can do this:

    struct date
      int month;
      int day;
      int year;
    } today;
We not only made a new struct type called date, we also made an instance of it called today.

You can also use this to make an array of structs:

    struct date
      int month;
      int day;
      int year;
    } birthdays[3];
And you can even make an anonymous struct by omitting its name:

      int month;
      int day;
      int year;
    } today = { 2, 11, 2020 };

Input and output

Every time you press the enter key on the terminal, the operating system adds these characters (plus a newline) to the stdin character stream.
You can pop off the next character:

    char c = getchar();
And add it to the stdout stream (essentially printing the character to terminal):



Characters in C are just small integers

    char c = 'A';
    int n = 65;

    n == c; //this is true

    printf("%i", c); //65
    printf("%c", n); //A