Identifiers · codenexium.com

Identifiers

An identifier is a name given to a program element such as a variable, function, array, structure, or label. Think of it like a label on a box - you use it to refer to that specific thing throughout your code.

int age = 25;        // 'age' is an identifier
float pi = 3.14;     // 'pi' is an identifier
void greet() { }     // 'greet' is an identifier

Without identifiers, you’d have no way to remember where you stored your data or which block of code to call.

Rules for Naming Identifiers

C has strict rules about what makes a valid identifier. Break any of these and your code won’t compile.

Rule Valid Invalid
Must begin with a letter a-z, A-Z or underscore _ count, _temp, value1 1value, @data
Can contain letters, digits, and underscores only total_sum, num2 total-sum, num#2
Cannot be a keyword myint, var_return int, return
Case-sensitive Count and count are different -
Length is not limited (but only first 31 chars are significant in C89) - -

Here is a practical example showing valid and invalid identifiers:

#include <stdio.h>

int main() {
    int age = 25;          // Valid: starts with letter
    int _count = 10;       // Valid: starts with underscore
    int num1 = 5;          // Valid: digits after first char
    int rollNumber = 101;  // Valid: mixed case

    // int 1stPlace = 1;   // Invalid: starts with digit
    // int my-name = 42;   // Invalid: hyphens not allowed
    // int float = 3;      // Invalid: 'float' is a keyword

    printf("Age: %d\n", age);
    printf("Count: %d\n", _count);
    printf("Number: %d\n", num1);
    printf("Roll: %d\n", rollNumber);

    return 0;
}

Examples of Identifiers

Identifier Valid? Reason
studentAge Starts with letter, only letters
_maxValue Starts with underscore
data2 Digits after first character
2ndPlace Starts with a digit
total-amount Hyphen not allowed
int Reserved keyword

Naming Conventions

Rules tell you what’s allowed. Conventions tell you what’s recommended. Following conventions makes your code easier for others (and future you) to read.

For Variables

Use snake_case or camelCase - pick one and stay consistent. Use meaningful names that describe the purpose.

int student_age = 20;          // snake_case (common in C)
float totalMarks = 98.5;       // camelCase
int x = 5;                     // Avoid: too vague
int number_of_students = 30;   // Good: descriptive

For Functions

Use snake_case with a verb that describes what the function does.

void print_report() { /* ... */ }
int calculate_sum(int a, int b) { return a + b; }
int get_user_age() { return 25; }

For User-defined Data Types

Use PascalCase (capital first letter) for types created with typedef, struct, or enum.

typedef struct {
    char name[50];
    int age;
} Student;           // PascalCase

typedef enum {
    MONDAY, TUESDAY
} WeekDay;           // PascalCase

Putting it all together:

#include <stdio.h>

typedef struct {
    char name[50];
    int age;
} Student;

float calculate_average(int a, int b) {
    return (a + b) / 2.0;
}

int main() {
    Student student1 = {"Alice", 22};
    float result = calculate_average(85, 92);

    printf("%s scored %.1f\n", student1.name, result);
    return 0;
}

What happens if we use a keyword as an Identifier?

You cannot. Keywords are reserved words that the C language uses for its own syntax - like int, return, if, while, float. Trying to use one as an identifier causes a compile-time error.

#include <stdio.h>

int main() {
    int int = 5;       // ❌ ERROR: expected identifier
    float return = 3.14; // ❌ ERROR: expected identifier
    int if = 10;       // ❌ ERROR: expected identifier

    printf("%d", int);
    return 0;
}

If you try to compile the above code, the compiler will immediately stop and tell you something like:

error: expected identifier or '(' before 'int'

What if you really want a variable named int or return? You can’t. Instead, use a variation like my_int, return_value, or int_var. This is why meaningful names matter - they avoid conflicts with reserved words.

Courses