Belirteç yapıştıran işleç (##)

Bazen birleştirme veya birleştirme işleci olarak adlandırılan çift sayı işareti veya belirteç yapıştırma işleci ()## hem nesneye benzer hem de işlev benzeri makrolarda kullanılır. Ayrı belirteçlerin tek bir belirteçte birleştirilmesine izin verir ve bu nedenle makro tanımındaki ilk veya son belirteç olamaz.

Makro tanımında biçimsel bir parametrenin öncesinde veya sonrasında belirteci yapıştırma işleci gelirse, biçimsel parametre hemen genişletilmeyen gerçek bağımsız değişken ile değiştirilir. Makro genişletme, değiştirme işleminden önce bağımsız değişken üzerinde gerçekleştirilmez.

Ardından belirteç-dizedeki belirteç yapıştırma işlecinin her oluşumu kaldırılır ve bundan önce gelen ve izleyen belirteçler birleştirilir. Elde edilen belirtecin geçerli bir belirteç olması gerekir. Geçerliyse, belirteç makro adını temsil ettiği takdirde olası bir değiştirmeye karşı taranır. Tanımlayıcı, bitiştirilmiş belirteçlerin değiştirme işleminden önce programda bilineceği adı temsil eder. Her belirteç, program içerisinde veya derleyici komut satırında tanımlanan bir belirteci temsil eder. İşlecin öncesinden veya arkasından gelen boşluk isteğe bağlıdır.

Bu örnekte, program çıktısı belirtilirken hem dize haline getirme hem de belirteci yapıştırma işleçlerinin kullanımı gösterilmektedir:

#define paster( n ) printf_s( "token" #n " = %d", token##n )
int token9 = 9;

Şunun gibi bir sayısal bağımsız değişkenle bir makro çağrılırsa:

paster( 9 );

makro şunu oluşturur:

printf_s( "token" "9" " = %d", token9 );

bu, daha sonra şuna dönüşür:

printf_s( "token9 = %d", token9 );

Örnek

// 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

Ayrıca bkz.

Ön işlemci işleçleri