error: pasting “.” and “red” does not give a valid preprocessing token

旧巷老猫 提交于 2019-12-03 10:22:26

. separates tokens and so you can't use ## as .red is not a valid token. You would only use ## if you were concatenating two tokens into a single one.

This works:

#define X(a, b) foo.a = -1;

What's a valid proprocessing token? Can someone explain this?

It is what gets parsed/lexed. foo.bar would be parsed as 3 tokens (two identifiers and an operator): foo . bar If you use ## you would get only 2 tokens (one identifier and one invalid token): foo .bar

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