Below are some more interesting facts about C programming:
1.
can have unbalanced braces:
When we use
#define
for a
, the
produces a C program where the defined constant is searched and matching
are replaced with the given expression.
Example:
#include <stdio.h> // Declaring Macro // with unbalanced brackets #define P printf( int main()
{ int a;
P"Hello World");
P"%d", a);
return 0;
} |
Hello World0
2. Use main to declare one or more integer variables:
Example:
#include <stdio.h> int main( int c)
{ for (; ++c < 28;)
putchar (95 + c);
return 0;
} |
abcdefghijklmnopqrstuvwxyz
3. “%m” when used within printf() prints “Success”
m (conversion specifier)
is not C but is a
GNU
extension to printf. The ‘
%m
’ conversion prints the string corresponding to the
error code in errno
.
%m
only prints “
Success
” when “
errno == 0
” (it’s short for a string representation of the last observed error state). For example, if a function fails before the printf, then it will print something rather different.
Example:
#include <stdio.h> int main()
{ printf ("%m");
return 0;
} |
Success
4. brk(0); can be used as an alternative for return 0;
brk()
and
sbrk()
change the location of the program break, which defines the end of the process’s data segment.
Example:
#include <stdio.h> int main()
{ printf ("%m");
brk();
} |
Success
5.
C program can be written without main()
Logically it seems impossible to write a C program without using a main() function. Since every program must have a main() function because:-
- It’s an entry point of every C/C++ program.
- All Predefined and User-defined Functions are called directly or indirectly through the main.
But in reality, it is possible to run a C program without a main function.
#include <stdio.h> #include <stdlib.h> // entry point function int nomain();
void _start()
{ // calling entry point
nomain();
exit (0);
} int nomain()
{ puts ("Geeksforgeeks");
return 0;
} |
Compilation using the command:
gcc filename.c -nostartfiles
(nostartfiles option tells the compiler to avoid standard linking)