Compile-Time vs Run-Time in C

In C programming, understanding the difference between compile-time and run-time is crucial for efficient code execution and debugging. These two phases of program execution impact how variables, functions, and operations are handled.

Compile-Time

Compile-time refers to the time when a program is being compiled by the compiler. During this phase, the source code is converted into machine code, and various tasks are performed such as syntax checking, type checking, and memory allocation for static variables. Compile-time decisions are made before the program starts running.

Run-Time

Run-time refers to the time when the program is executed on the computer. During this phase, the code that was generated at compile-time is executed. Variables are assigned values, memory is allocated dynamically, and functions are called based on user input or program logic. Any runtime errors will occur during this phase.

Examples of Compile-Time and Run-Time Concepts in C

Compile-Time Example

        
#include <stdio.h>

#define MAX_VALUE 100  // Compile-time macro

int main() 
{
    printf("Max value is: %d\n", MAX_VALUE);
    return 0;
}
        
    

Output

Max value is: 100

Run-Time Example

        
#include <stdio.h>
#include <stdlib.h>

int main() 
{
    int *arr = (int *)malloc(5 * sizeof(int));  // Run-time memory allocation

    for (int i = 0; i < 5; i++) 
    {
        arr[i] = i * 2;
    }

    for (int i = 0; i < 5; i++) 
    {
        printf("Value: %d\n", arr[i]);
    }

    free(arr);  // Free the dynamically allocated memory
    return 0;
}
        
    

Output

Value: 0
Value: 2
Value: 4
Value: 6
Value: 8

Compile-Time vs Run-Time in Multi-file Programs

In a multi-file C program, compile-time decisions are made when each source file is compiled. For example, macros or constants in one file are substituted before any files are linked. Run-time decisions, such as memory allocation and user input, occur when the program is executed.

Here’s an example showing how compile-time and run-time affect multi-file programs:

        
// file1.c
#include <stdio.h>

#define MAX_VALUE 50  // Compile-time macro

void showMax() 
{
    printf("Max value is: %d\n", MAX_VALUE);
}
        
    
        
// file2.c
#include <stdio.h>

extern void showMax();  // Function from file1.c

int main() 
{
    int *arr = (int *)malloc(MAX_VALUE * sizeof(int));  // Run-time memory allocation
    showMax();
    free(arr);  // Free dynamically allocated memory
    return 0;
}
        
    

Output of Multi-file Program

Output

Max value is: 50