Understanding C program Compilation Process
Object-like Macros
Macro Arguments
Pre Processor Directives in C
The C Preprocessor
Standard Predefined Macros
include guard
Common Predefined Macros
- What are macros and how to use them
- What are the most common predefined macros
- How to include guard your header files
- Allowed editors: vi, vim, emacs
- All your files will be compiled on Ubuntu 20.04 LTS using gcc, using the options -Wall -Werror -Wextra -pedantic -std=gnu89
- All your files should end with a new line
- Your code should use the Betty style. It will be checked using betty-style.pl and betty-doc.pl
- You are not allowed to use global variables
- No more than 5 functions per file
- The only C standard library functions allowed are malloc, free and exit. Any use of functions like printf, puts, calloc, realloc etc… is forbidden
- All your header files should be include guarded
You do not have to learn about calloc and realloc.
Create a header file that defines a macro named SIZE as an abbreviation for the token 1024.
pie@ubuntu:~/0x0c. macro, structures$ cat 0-main.c
#include "0-object_like_macro.h"
#include "0-object_like_macro.h"
#include <stdio.h>
/**
* main - check the code
*
* Return: Always 0.
*/
int main(void)
{
int s;
s = 98 + SIZE;
printf("%d\n", s);
return (0);
}
pie@ubuntu:~/0x0c. macro, structures$ gcc -Wall -pedantic -Werror -Wextra -std=gnu89 0-main.c -o a
pie@ubuntu:~/0x0c. macro, structures$ ./a
1122
pie@ubuntu:~/0x0c. macro, structures$ Repo:
- GitHub repository: alx-low_level_programming
- Directory: 0x0D-preprocessor
- File: 0-object_like_macro.h
Create a header file that defines a macro named PI as an abbreviation for the token 3.14159265359.
pie@ubuntu:~/0x0c. macro, structures$ cat 1-main.c
#include "1-pi.h"
#include "1-pi.h"
#include <stdio.h>
/**
* main - check the code
*
* Return: Always 0.
*/
int main(void)
{
float a;
float r;
r = 98;
a = PI * r * r;
printf("%.3f\n", a);
return (0);
}
pie@ubuntu:~/0x0c. macro, structures$ gcc -Wall -pedantic -Werror -Wextra -std=gnu89 1-main.c -o b
pie@ubuntu:~/0x0c. macro, structures$ ./b
30171.855
pie@ubuntu:~/0x0c. macro, structures$ Repo:
- GitHub repository: alx-low_level_programming
- Directory: 0x0D-preprocessor
- File: 1-pi.h
Write a program that prints the name of the file it was compiled from, followed by a new line.
- You are allowed to use the standard library
pie@ubuntu:~/0x0c. macro, structures$ gcc -Wall -pedantic -Werror -Wextra -std=gnu89 2-main.c -o c pie@ubuntu:~/0x0c. macro, structures$ ./c 2-main.c pie@ubuntu:~/0x0c. macro, structures$ cp 2-main.c 02-main.c pie@ubuntu:~/0x0c. macro, structures$ gcc -Wall -pedantic -Werror -Wextra -std=gnu89 02-main.c -o cc pie@ubuntu:~/0x0c. macro, structures$ ./cc 02-main.c pie@ubuntu:~/0x0c. macro, structures$
Repo:
- GitHub repository: alx-low_level_programming
- Directory: 0x0D-preprocessor
- File: 2-main.c
Write a function-like macro ABS(x) that computes the absolute value of a number x.
pie@ubuntu:~/0x0c. macro, structures$ cat 3-main.c
#include <stdio.h>
#include "3-function_like_macro.h"
#include "3-function_like_macro.h"
/**
* main - check the code
*
* Return: Always 0.
*/
int main(void)
{
int i;
int j;
i = ABS(-98) * 10;
j = ABS(98) * 10;
printf("%d, %d\n", i, j);
return (0);
}
pie@ubuntu:~/0x0c. macro, structures$ gcc -Wall -pedantic -Werror -Wextra -std=gnu89 3-main.c -o d
pie@ubuntu:~/0x0c. macro, structures$ ./d
980, 980
pie@ubuntu:~/0x0c. macro, structures$ Repo:
- GitHub repository: alx-low_level_programming
- Directory: 0x0D-preprocessor
- File: 3-function_like_macro.h
Write a function-like macro SUM(x, y) that computes the sum of the numbers x and y.
pie@ubuntu:~/0x0c. macro, structures$ cat 4-main.c
#include <stdio.h>
#include "4-sum.h"
#include "4-sum.h"
/**
* main - check the code
*
* Return: Always 0.
*/
int main(void)
{
int s;
s = SUM(98, 1024);
printf("%d\n", s);
return (0);
}
pie@ubuntu:~/0x0c. macro, structures$ gcc -Wall -pedantic -Werror -Wextra -std=gnu89 4-main.c -o e
pie@ubuntu:~/0x0c. macro, structures$ ./e
1122
pie@ubuntu:~/0x0c. macro, structures$ Repo:
- GitHub repository: alx-low_level_programming
- Directory: 0x0D-preprocessor
- File: 4-sum.h