2 u012552444 u012552444 于 2016.04.17 17:29 提问

C++宏定义字符串时出错

在用xcode写cocos2d的程序时,遇到一个问题,当调试环境是mac时,需要的文件路径为绝对路径,调试环境是iphone时,文件路径直接是文件名就可以了。为了解决这个问题,尝试写了一下宏。如下:
#define RUN_IN_IOS

#define TO_STRING(_string) #_string
#ifdef RUN_IN_IOS
#define GET_FILE(_fileName) TO_STRING(_fileName)
#else
#define GET_FILE(_fileName) TO_STRING(/Users/aaa/Resource/##_fileName)
#endif

调用的方式为:
string ttfPath = GET_FILE(Marker.ttf);

结果报错为:
Pasting formed '/Marker', an invalid preprocessing token

查询之后发现可能是clang编译的问题,但是我不太懂这个。
请教各位如果不使用这种写法,该怎么写达到我预计的效果?

谢谢各位!

4个回答

caozhy
caozhy   Ds   Rxr 2016.04.17 17:54

给字符串加上引号试试看。

webcq
webcq   2016.04.17 19:23

#define TO_STRING(_string) #_string
#ifdef RUN_IN_IOS
试试
#define GET_FILE(_fileName) TO_STRING(_fileName)
#else
#define GET_FILE(_fileName) TO_STRING("/Users/aaa/Resource/"##_fileName)
#endif

调用的方式为:
string ttfPath = GET_FILE("Marker.ttf)";

webcq
webcq   2016.04.17 19:31

不好意思,写错了,用下面的方式:

#define RUN_IN_IOS

#ifdef RUN_IN_IOS
#define GET_FILE(_fileName) _fileName
#else
#define GET_FILE(_fileName) "/Users/aaa/Resource/"##_fileName
#endif

调用的方式为:
char * pstr=GET_FILE("Marker.ttf");

u012552444
u012552444 这个写法好像不行 最后读到的结果是 "/Users/aaa/Resource/""Marker.ttf"
一年多之前 回复
u012552444
u012552444   2016.04.17 23:07

谢谢各位已经解决了 最后写成了这样 虽然没有解决原来的疑惑 但总归是解决了问题

#ifdef RUN_IN_IOS
static string GET_FILE(string _fileName)
{
    return _fileName;
}
#else
static string GET_FILE(string _fileName)
{
    string path1 = "/Users/aaa/Resources/";
    return path1+_fileName;
}
#endif

调用方法是
GET_FILE("Marker.ttf")

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!