What does the
restrict keyword mean in C?
Take this example:
char* realpath(const char *restrict, char *restrict);
realpath(path, realpath) canonicalizes the filepath
path and puts the result in the buffer
realpath == NULL, it allocates a new string and returns a pointer to it.
restrict is a “type qualifier”. (Other things in this category are
volatile). This means, for some type
T, we can write
T restrict to get another type. For example,
char const * restrict is a type.
Actually, it only applies to pointer types, i.e.
T * restrict. So
int restrict is invalid, but
int * restrict is valid.
In a function, a parameter
T * restrict p means that the allocated object pointed at by
p is only pointed at by
p. That is, during the execution of the function body, the only way to access
*p is via
p itself (also allowing for pointer manipulation like
p++). Other variables in scope, such as other function parameters, or global variables, do not point at
*p; nor does the memory graph available from those variables contain any pointers to
The compiler can then make some optimizations.
I wrote this because I felt like it. This post is not associated with my employer. This site is hosted by Netlify (who are great, but I'm not associated with them either).