2014-02-01 5 views
-1

я очень смущен, когда мой C++ книга сказал, что если у меня есть пять функций с именем fOnePrint, ftwoprint, fthreeprint, fourprint и fFivePrint, и вам нужно объявить их с помощью ##, вы делаете:Что делает оператор ## в C++?

#define fPrint(x) f##x## print 

Может кто-нибудь, пожалуйста, объясните мне, как использовать этот макрос конкатенации с простым примером?

Я использую MS Visual C++ 2010 Express.

+0

Dont you google то же самое ?? –

ответ

1

Простейшие пример:

#define XY(x,y) x##y 

который переводит

XY(1,2) к 12.

Аналогично,

#define fprint(S) f##S##print 

переведет

fprint(One) в fOnePrint fprint(Two) к fTwoPrint и так далее.

0

Нет никакого принуждения использовать оператор ##. Тем не менее, намерение состоит в том, что вы можете, если вы хотите, написав, например:

fPrint(two)("format string %d\n", value); 

который выглядит довольно забавно. Однако fPrint(two) макрос раскрывается в

ftwoprint 

, а затем следующие скобки может сделать код в правильный вызов функции. Там нет ничего, чтобы остановить вас писать вместо этого:

ftwoprint("format string %d\n", value); 

Это далеко не ясно, есть Notational польза для макроса.

Смежные вопросы