logo

# a ## operátorů v C

Stringizační operátor (#)

The operátor řetězce (#) je operátor preprocesoru, který způsobí, že bude uzavřen odpovídající skutečný argument dvojité uvozovky. Operátor #, který se obecně nazývá provázat operátor, změní argument, kterému předchází, na a citovaný řetězec . Je také známý jako operátor stringifikace.

Obecně se používá s makry v C.



bash rozdělit řetězec oddělovačem

Příklad

Následující kód C ukazuje použití operátoru Stringizing (#).

C








>

>

Výstup

q2 měsíce
geeksforgeeks>

Vysvětlení

Následující preprocesor otočí řádek printf(mkstr(geeksforgeeks)); do printf(geeksforgeeks);

Operátor vkládání tokenu (##)

The Operátor vkládání tokenu (##) umožňuje zřetězení tokenů používaných jako skutečné argumenty do jiných tokenů. Při rozbalování maker je často užitečné sloučit dva tokeny do jednoho. To se nazývá vkládání tokenů nebo zřetězení tokenů.

Operátor předběžného zpracování „##“ provede vložení tokenu. Když se makro rozbalí, dva tokeny na obou stranách každého operátoru „##“ se sloučí do jednoho tokenu, který pak nahradí „##“ a dva původní tokeny v rozšíření makra.

Příklady

Následující kód C ukazuje použití operátoru vkládání tokenů (##).

C


objekt pole v jazyce Java



// C program to illustrate (##) operator> #include> > // Macro definition using the Token-pasting operator> #define concat(a, b) a##b> int> main(>void>)> {> >int> xy = 30;> > >// Printing the concatenated value of x and y> >printf>(>'%d'>, concat(x, y));> >return> 0;> }>

platné identifikátory v jazyce Java
>

>

Výstup

30>

Vysvětlení

Preprocesor transformuje printf(%d, concat(x, y)); do printf(%d, xy);

Aplikace operátoru pro vkládání tokenů (##)

## poskytuje způsob, jak zřetězit skutečné argumenty během rozšiřování maker. Pokud parametr v nahrazujícím textu sousedí s ##, parametr se nahradí skutečným argumentem, ## a okolní prázdné místo se odstraní a výsledek se znovu naskenuje.