Constants in C

Constants are fixed values that cannot be changed during program execution. Think of them as permanent labels - once you stick them on, they stay there! In C, constants help make your code more readable, maintainable, and less prone to errors.

A constant is a value that remains unchanged throughout the program's execution. Unlike variables, once a constant is defined, its value cannot be modified.

Types of Constants

1. Literal Constants

These are direct values written in your code:

#include <stdio.h>

int main() {
    printf("Number: %d\n", 42);        // Integer literal
    printf("Pi: %.2f\n", 3.14159);     // Float literal
    printf("Grade: %c\n", 'A');        // Character literal
    printf("Message: %s\n", "Hello");  // String literal
    
    return 0;
}

2. Named Constants using const keyword

The const keyword creates read-only variables:

#include <stdio.h>

int main() {
    const int MAX_STUDENTS = 50;
    const float PI = 3.14159;
    const char GRADE = 'A';
    
    printf("Maximum students: %d\n", MAX_STUDENTS);
    printf("Value of PI: %.5f\n", PI);
    printf("Top grade: %c\n", GRADE);
    
    // MAX_STUDENTS = 60; // This would cause an error!
    
    return 0;
}

3. Preprocessor Constants using #define

These are defined before compilation and replaced throughout the code:

#include <stdio.h>

#define MAX_SIZE 100
#define PI 3.14159
#define COMPANY_NAME "TechCorp"

int main() {
    printf("Maximum size: %d\n", MAX_SIZE);
    printf("PI value: %.5f\n", PI);
    printf("Company: %s\n", COMPANY_NAME);
    
    return 0;
}

Comparison: const vs #define

Featureconst#define
Type checkingYesNo
ScopeFollows C scoping rulesGlobal replacement
MemoryAllocates memoryNo memory allocation
DebuggingEasier to debugHarder to debug
PreprocessingNot involvedPreprocessor replacement

Best Practices

1. Use Meaningful Names

// Good
const int DAYS_IN_WEEK = 7;
const float SALES_TAX_RATE = 0.08;

// Avoid
const int X = 7;
const float Y = 0.08;

2. Use ALL_CAPS for #define Constants

#define MAX_BUFFER_SIZE 1024
#define DEFAULT_TIMEOUT 30

3. Use const for Type Safety

const int array_size = 10;
int numbers[array_size];  // Type-safe array declaration

Common Use Cases

Mathematical Constants

#include <stdio.h>

#define PI 3.14159265359
#define E 2.71828182846

int main() {
    const float radius = 5.0;
    float area = PI * radius * radius;
    
    printf("Area of circle: %.2f\n", area);
    return 0;
}

Configuration Values

#include <stdio.h>

#define MAX_USERNAME_LENGTH 20
#define MIN_PASSWORD_LENGTH 8
#define MAX_LOGIN_ATTEMPTS 3

int main() {
    printf("System Configuration:\n");
    printf("Max username length: %d\n", MAX_USERNAME_LENGTH);
    printf("Min password length: %d\n", MIN_PASSWORD_LENGTH);
    printf("Max login attempts: %d\n", MAX_LOGIN_ATTEMPTS);
    
    return 0;
}

Why Use Constants?

  1. Readability: const int SPEED_LIMIT = 65; is clearer than just 65
  2. Maintainability: Change the value in one place, not throughout the code
  3. Error Prevention: Prevents accidental modification of important values
  4. Performance: #define constants are replaced at compile-time, no runtime overhead

Constants are like the foundation stones of your program - solid, reliable, and unchanging. They make your code more professional and easier to understand!