Operator penempelan token (##)
Operator tanda nomor ganda atau token-pasting (##), yang terkadang disebut operator penggabungan atau penggabungan , digunakan dalam makro seperti objek dan seperti fungsi. Ini memungkinkan token terpisah untuk digabungkan ke dalam satu token, dan oleh karena itu, tidak dapat menjadi token pertama atau terakhir dalam definisi makro.
Jika parameter formal dalam definisi makro didahului atau diikuti oleh operator token-pasting, parameter formal segera digantikan oleh argumen aktual yang tidak tertandingi. Ekspansi makro tidak dilakukan pada argumen sebelum penggantian.
Kemudian, setiap kemunculan operator token-pasting dalam token-string dihapus, dan token sebelumnya dan mengikutinya digabungkan. Token yang dihasilkan harus berupa token yang valid. Jika ya, token dipindai untuk kemungkinan penggantian jika mewakili nama makro. Pengidentifikasi mewakili nama tempat token yang digabungkan akan diketahui dalam program sebelum penggantian. Setiap token mewakili token yang ditentukan di tempat lain, baik dalam program atau pada baris perintah pengkompilasi. Spasi kosong sebelum atau mengikuti operator bersifat opsional.
Contoh ini menggambarkan penggunaan operator stringizing dan token-pasting dalam menentukan output program:
#define paster( n ) printf_s( "token" #n " = %d", token##n )
int token9 = 9;
Jika makro dipanggil dengan argumen numerik seperti
paster( 9 );
hasil makro
printf_s( "token" "9" " = %d", token9 );
yang menjadi
printf_s( "token9 = %d", token9 );
Contoh
// preprocessor_token_pasting.cpp
#include <stdio.h>
#define paster( n ) printf_s( "token" #n " = %d", token##n )
int token9 = 9;
int main()
{
paster(9);
}
token9 = 9