11. What is recursion in C?
When a function in C calls a copy of itself, this is known as recursion. To put it another
way, when a function calls itself, this technique is called Recursion. Also, this function
is known as recursive function.
Syntax of Recursive Function:
void do_recursion()
{
... .. ...
do_recursion();
... .. ...]
}
int main()
{
... .. ...
do_recursion();
... .. ...
}
12. Why doesn’t C support function overloading?
A
Additionally, C does not feature strict typing. Many things are implicitly convertible to
each other in C. The complexity of overload resolution rules could introduce
confusion in such kind of language
13. What is the difference between global int and static int
declaration?
The difference between this is in scope. A truly global variable has a global scope and
is visible everywhere in your program.
#include <stdio.h>
int my_global_var = 0;
int
main(void)
{
printf("%d\n", my_global_var);
return 0;
}
global_temp is a global variable that is visible to everything in your program,
although to make it visible in other modules, you'd need an ”extern int global_temp;
” in other source files if you have a multi-file project.
A static variable has a local scope but its variables are not allocated in the stack
segment of the memory. It can have less than global scope, although - like global
variables - it resides in the .bss segment of your compiled binary.
#include <stdio.h>
int
myfunc(int val)
{
static int my_static_var = 0;
my_static_var += val;
return my_static_var;
}
int
main(void)
{
int myval;
myval = myfunc(1);
printf("first call %d\n", myval);
myval = myfunc(10);
printf("second call %d\n", myval);
return 0;
}
14. What is a pointer in C?
A pointer is a variable that stores or points to another variable's address. The value of
a variable is stored in a normal variable, whereas the address of a variable is stored in
a pointer variable.
15. Difference between const char* p and char const* p?
const char* p is a pointer to a const char.
char const* p is a pointer to a char const.
Since const char and char const are the same, it's the same.
16. What is pointer to pointer in C?
In C, a pointer can also be used to store the address of another pointer. A double
pointer or pointer to pointer is such a pointer. The address of a variable is stored in
the first pointer, whereas the address of the first pointer is stored in the second
pointer.
The syntax of declaring a double pointer is given below:
int **p; // pointer to a pointer which is pointing to an integer
17. Why n++ executes faster than n+1 ?
n++ being a unary operation, it just needs one variable. Whereas, n = n + 1 is a binary
operation that adds overhead to take more time (also binary operation: n += 1).
However, in modern platforms, it depends on few things such as processor
architecture, C compiler, usage in your code, and other factors such as hardware
problems.
While in the modern compiler even if you write n = n + 1 it will get converted into n++
when it goes into the optimized binary, and it will be equivalently efficient.
18. What is typecasting in C?
Typecasting is the process to convert a variable from one datatype to another. If we
want to store the large type value to an int type, then we will convert the data type
into another data type explicitly.
Syntax: (data_type)expression;
For Example:
int x;
for(x=97; x<=122; x++)
{
printf("%c", (char)x);
}
19. What are the advantages of Macro over function
Macro on a high-level copy-paste, its definitions to places wherever it is called. Due to
which it saves a lot of time, as no time is spent while passing the control to a new
function and the control is always with the callee function. However, one downside is
the size of the compiled binary is large but once compiled the program
comparatively runs faster.
20. What are Enumerations?
Enumeration, also known as Enum in C, is a user-defined data type. It consists of
constant integrals or integers that have names assigned to them by the user. Because
the integer values are named with enum in C, the whole program is simple to learn,
understand, and maintain by the same or even different programmer.
21. When should we use the register storage specifier?
If a variable is used frequently, it should be declared with the register storage
specifier, and the compiler may allocate a CPU register for its storage to speed up
variable lookup.