- an Overview of register Keyword in C Programming Language
- Usage of Register Keyword in C
- Get the Address of a Register Variable in C
- Use the register Keyword With a Pointer Variable in C
- Usage of Storage Classes With register Keyword in C
- Scope of the register Variable in C Programming Language
![The register Keyword in C (1) The register Keyword in C (1)](https://i0.wp.com/www.delftstack.com/img/C/ag-feature-image---c-register-keyword.webp)
This article will discuss the register
keyword in the C programming language.
an Overview of register
Keyword in C Programming Language
All of the variables in a C program are saved to memory, each with its memory address. However, if you use the register
keyword in conjunction with a variable, the compiler is more likely to save the variable in a CPU register than in memory.
In case you were unaware, a processor has a finite number of general purpose registers, and it is the responsibility of the central processing unit (CPU) to load all variables into their respective registers before performing arithmetic or logical operations on data.
Registers are much quicker than memory, and the access timer for the CPU is correspondingly shorter.
As a result, we pair a register
keyword with a variable with the highest frequency of occurrence throughout the program. The register
keyword tells the compiler that the variable in question should be stored in a processor register so that it may be retrieved in the shortest amount of time possible.
However, it is up to the compiler to decide whether or not to store this variable in the memory or a processor register.
Let us look at multiple scenarios where the register
keyword can be used in the programs.
Usage of Register
Keyword in C
Below is a simple example of the register
keyword used in the C programming language.
#include <stdio.h>int main() { register char a = 'S'; register double b = 10; register int c = 8; printf("The value of register variable a: %c\n", a); printf("The value of register variable b: %f\n", b); printf("The value of register variable c: %d", c); return 0;}
Output:
The value of register variable a: SThe value of register variable b: 10.000000The value of register variable c: 8
Get the Address of a Register Variable in C
Suppose you place a register
keyword with a variable. In that case, you cannot access the address of the variable using the unary address operator &
even if the compiler decides to store the variable in memory rather than a CPU register.
This is a crucial fact to keep in mind.
If you combine the address operator &
with a register variable, the compiler you are using will either give you a warning or an error. The message that you get will depend on which one it is.
Because when you use the register
keyword with a variable, the variable’s value can be placed in a processor register rather than in memory, and processor registers do not have any address. Let us take an example.
#include <stdio.h>int main() { register int registerVariable = 22; int* ptr = ®isterVariable; printf("%d", *ptr); return 0;}
Output:
main.c: In function ‘main’:main.c:5:5: error: address of register variable ‘registerVariable’ requested 5 | int* ptr = ®isterVariable; | ^~~
Use the register
Keyword With a Pointer Variable in C
The register
keyword may be used with the pointer. It can have the address of a memory location.
Here is an example of the register
keyword used with the pointer variable in the C programming language.
#include <stdio.h>int main() { int value = 15; register int* pointerVariable = &value; printf("The value of the pointer is: %d", *pointerVariable); return 0;}
Output:
The value of the pointer is: 15
Usage of Storage Classes With register
Keyword in C
The C programming language does not permit using various storage class specifiers for a single variable. The register is a storage class.
Therefore, you cannot use the register in combination with static
, auto
, and extern
.
#include <stdio.h>int main() { auto register int value = 15; printf("The value of the pointer is: %d", value); return 0;}
Output:
main.c: In function ‘main’:main.c:5:5: error: multiple storage classes in declaration specifiers 5 | auto register int value = 15; | ^~~~
Scope of the register
Variable in C Programming Language
It is only possible to use the register
keyword in conjunction with a local variable; it is not possible to use a register with a variable that has a global scope.
#include <stdio.h>register int value = 22;int main() { printf("%d", value); return 0;}
Output:
main.c:3:14: error: register name not specified for ‘value’ 3 | register int value = 22; |