Earlier, #define is the only way to define constants. Later const came in, which is also used to define constants. Most of the programmers prefer to use const over #define for the following reasons
- Syntax check will be done for const but not for #define. The #define directive is not checked for syntax errors until the error macro is used in code block.
- #define can only define simple constant. But, const can define complex constants as shown below.
struct student {
char name[100];
int age;
float percentage;
};
const struct student obj = {"Victor", 20, 89};
Consider the following example,
#include <stdio.h>
#define SUM 10+
int main() {
int a;
printf("Hello world\n");
return 0;
}
Output:
jp@jp-VirtualBox:~/$ ./a.out
Hello world
Hello world
In the above C program, we have a syntax error in macro definition(#define SUM 10+). But, it wasn't reported to us since we haven't used it anywhere in our code. Let us see what happen if we use the same macro inside the code block
#include <stdio.h>
#define SUM 10+
int main() {
int a = SUM; // SUM is the macro with syntax error
printf("Hello world\n");
return 0;
}
Output:
jp@jp-VirtualBox:~/$ gcc pgm.c
pgm.c: In function ‘main’:
pgm.c:4: error: expected expression before ‘;’ token
pgm.c: In function ‘main’:
pgm.c:4: error: expected expression before ‘;’ token
In the above program, the definition for macro SUM has syntax error and the same is assigned to integer variable a. During preprocessing 10+ would be assigned to variable a, compiler detects the same as error during compilation process.
Let us see how const behaves when there is some syntax error.
#include <stdio.h>
int main() {
const int a = 10+;
printf("Hello world\n");
return 0;
}
Output:
jp@jp-VirtualBox:~/$ gcc pgm.c
pgm.c: In function ‘main’:
pgm.c:4: error: expected expression before ‘;’ token
pgm.c: In function ‘main’:
pgm.c:4: error: expected expression before ‘;’ token
Syntax error with const is reported during compilation itself.
No comments:
Post a Comment