A function that is declared as pure can have no side effects. For example, pure functions:
cannot call impure functions
cannot use global variables or dereference pointers, because the compiler assumes that the function does not access memory, except stack memory
must return the same value each time when called twice with the same parameters.