Why Do We Need Constants?
Constants have many important purposes in programming:
1. Readability: By using meaningful names for constants, your code becomes more readable & self-explanatory. Instead of using magic numbers or hard-coded values, you can use descriptive names that convey the purpose of the value.
2. Maintainability: If you need to change the value of a constant, you only need to modify it in one place—where it is defined. This makes your code easier to maintain and less prone to errors caused by inconsistent values.
3. Compile-time checking: When you use constants, the compiler can catch errors related to invalid assignments or comparisons at compile time. This helps prevent runtime errors and improves the overall reliability of your code.
4. Memory efficiency: Constants are stored in a separate memory area from variables, which can lead to more efficient memory usage. The compiler can optimize the use of constants, as it knows their values at compile time.
How to Define Constants
In C, there are two ways to define constants:
1. Using the `const` keyword
2. Using the `#define` preprocessor directive
When you use the `const` keyword, you declare a variable as constant, meaning its value cannot be modified once assigned.
The syntax is:
const data_type constant_name = value;
For example:
const int MAX_VALUE = 100;
const float PI = 3.14159;
On the other hand, the `#define` preprocessor directive allows you to define symbolic constants. It replaces all occurrences of the constant name with its corresponding value during the preprocessing stage before the actual compilation. The syntax is:
#define CONSTANT_NAME value
For example:
#define MAX_SIZE 1024
#define MESSAGE "Hello, World!"
Syntax for Creating Symbolic Constants
To create a symbolic constant using the `#define` preprocessor directive, we need to follow this syntax:
#define CONSTANT_NAME value
In this syntax:
- `#define` is the preprocessor directive that tells the compiler to perform a simple text substitution.
- `CONSTANT_NAME` is the name you assign to the constant. By convention, it is written in uppercase letters with underscores separating words.
- `value` is the actual value that the constant represents. It can be an integer, floating-point number, character, string, or even an expression.
Let’s discuss a few important points that we need to remember when we are creating symbolic constants:
- There should be no semicolon (`;`) at the end of the `#define` directive.
- The constant name is typically written in uppercase letters to distinguish it from variables.
- The value can be any valid C constant expression, such as a literal value, an arithmetic expression, or even another constant.
- Symbolic constants defined using `#define` do not have a specific data type associated with them. The preprocessor simply replaces the constant name with its corresponding value.
Symbolic Constants Examples
Let’s look at a few examples to understand the use of symbolic constants in C:
1. Defining mathematical constants:
#define PI 3.14159
#define E 2.71828
2. Defining size limits:
#define MAX_SIZE 100
#define BUFFER_SIZE 1024
3. Defining error codes:
#define SUCCESS 0
#define ERROR_FILE_NOT_FOUND 1
#define ERROR_INVALID_INPUT 2
4. Defining character constants:
#define NEWLINE '\n'
#define TAB '\t'
5. Defining string constants:
#define MESSAGE "Hello, World!"
#define CONFIG_FILE "config.ini"
Using symbolic constants in your code
#include <stdio.h>
#define PI 3.14159
#define MAX_SIZE 100
int main() {
const double radius = 5.0;
double circumference = 2 * PI * radius;
printf("Circumference: %.2f\n", circumference);
int arr[MAX_SIZE];
// Use MAX_SIZE as the array size
return 0;
}

You can also try this code with Online C Compiler
Run Code
In this example, `PI` calculates the circumference of a circle, and `MAX_SIZE` defines the size of an array.
Output
Circumference: 31.42
Frequently Asked Questions
Can I modify the value of a symbolic constant?
No, symbolic constants defined using `#define` cannot be modified once they are defined.
Is there a difference between using `const` and `#define` for constants?
Yes, `const` creates a typed constant, while `#define` creates a symbolic constant that is substituted by the preprocessor.
Can I use expressions as values for symbolic constants?
Yes, you can use any valid C constant expression as the value for a symbolic constant.
Conclusion
In this article, we discussed symbolic constants in C. We learned what constants are, why they are useful, and how to define them using the `#define` preprocessor directive. We also looked at the syntax for creating symbolic constants with examples to understand their implementation. Symbolic constants play a crucial role in writing readable, maintainable, & efficient code in C.
You can also check out our other blogs on Code360.