Typedef in C++

Typedef

Here, on this page, we will discuss typedef in c++.

  • We can create alias names to the existing datatype name (predefined or user-defined) with the help of typedef keyword
  • It doesn’t create a new datatype It just adds a new name for the existing type
  • Sometimes when we are using complex type names more frequently in our program, it is better to  have a simple alternate name to increase the readability of the code
typedef in c++

C++ typedef Syntax

typedef built_in_datatype user_defined_name;

Here existing name is the C++ datatype and user_defined_name is the alternate name given to existing_type

C++ program to  demonstrate typedef

#include<iostream>
using namespace std;

int main() 
{
    typedef int trish;
    
    trish a = 1; //a is int type internally 
    trish b = 2; //b is int type internally
    
    cout << "a: " << a << "\nb: " << b;
    
    return 0;
}

Output:

a: 1
b: 2

Using typedef for struct types

Here we have used the student as an alias name for the struct name stuAlias, so where ever you create a variable with type student internally structure is created and that variable will have size same structure

#include<iostream>
using namespace std;

// typedef struct created here
typedef struct stuAlias
{
    string name;
    int id;
    string klg;
}student;

int main()
{

    student s1,s2;  //2 variables of type student
    
    s1.id = 66;
    s1.name = "trishaank";
    s1.klg = "MECS";
    
    s2.id = 27;
    s2.klg = "KMIT";
    s2.name = "Rishi";
    
    cout << "Trishaank Details:\n";
    cout << s1.name << " "<< s1.id << " "<< s1.klg << endl;

    cout << "\nRishi Details:\n";
    cout << s2.name << " " << s2.id <<" "<< s2.klg;

    return 0;
}

O/P

Trishaank Details: 
trishaank 66 MECS 

Rishi Details: 
Rishi 27 KMIT

Nested typedef

Once you create an alias name for a datatype using a typedef, you can further be given another alias name with the previous alias name but finally, Compiler Replaces the with root alias

  • Here trish is replaced with int but whenever compiler encounters the name rish it initially replaces with trish then replaces with int
  • Similarly, when vicky is encountered it is replaced with rish initially, as no datatype, is  found with that name it replaces with trish and finally, trish is replaced with int
#include<iostream>
using namespace std;

int main()
{
    typedef int trish;
    typedef trish rish;
    typedef rish vicky;

    trish a = 1;
    rish b = 2;
    vicky c = 3;

    //trish, rish, vicky treated as int internally
    cout << "a:" << a << "\t" << "b:" << b << "\t" << "c:" << c;

    return 0;
}

O/P

a:1
b:2
c:3

Note:

You can freely use the original name even if you have an alias name within the program

int main()
{
    typedef int trish;
    trish a = 1;  // a is int type internally
    int b = 2;  // you can use original datatype name
}