What does ## mean for the C(C++) preprocessor?

廉价感情. 提交于 2019-12-17 04:07:54

问题


I have a C program below:

#define f(g,g2) g##g2
main()
{
int var12=100;
printf("%d",f(var,12));
}

when I run just the preprocessor it expands this as

{
int var12=100;
printf("%d",var12);
}

which is the reason why the output is 100.

Can anybody tell me how/why the preprocessor expands var##12 to var12?


回答1:


nothing too fancy: ## tells the preprocessor to concatenate the left and right sides

see http://en.wikipedia.org/wiki/C_preprocessor#Token_concatenation




回答2:


because ## is a token concatenation operator for the c preprocessor.

Or maybe I don't understand the question.




回答3:


## is Token Pasting Operator

The double-number-sign or "token-pasting" operator (##), which is sometimes called the "merging" operator, is used in both object-like and function-like macros. It permits separate tokens to be joined into a single token and therefore cannot be the first or last token in the macro definition.

If a formal parameter in a macro definition is preceded or followed by the token-pasting operator, the formal parameter is immediately replaced by the unexpanded actual argument. Macro expansion is not performed on the argument prior to replacement.




回答4:


#define f(g,g2) g##g2

## is usued to concatenate two macros in c-preprocessor. So before compiling f(var,12) should replace by the preprocessor with var12 and hence you got the output.



来源:https://stackoverflow.com/questions/2025858/what-does-mean-for-the-cc-preprocessor

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!