User-defined gates and primitive gates

In the OpenQASM language, the users can define any gate they choose. The syntax is as follows:

gate name(params) qargs
{
        body
}

qargs here is a comma-separated list of qubits, and at least one argument is required. IBM at the time of the writing of this book does not support this feature for users.