【发布时间】:2012-10-24 20:12:07
【问题描述】:
如果问题看起来太明显或太简单,我们深表歉意。不幸的是,经过一堆线程并在谷歌上搜索 typedef 加上 attribute 前缀后,我仍然无法弄清楚。
我在一个(假定的)便携式应用程序中有以下 sn-p 代码 -
#ifdef WIN32
#define MY_PREFIX __declspec(dllexport)
#else
#define MY_PREFIX __attribute__((visibility("default")))
#endif
typedef MY_PREFIX bool some_func(void);
所以我的问题是 -
1) typedef 到底在做什么?
2) 代码在 VS2008 上编译良好,但在 G++ (gcc-4.1) 上,我收到警告
“‘可见性’属性被忽略”
有什么办法可以消除该警告? (省略 -Wattributes 不是一个选项)
谢谢!
【问题讨论】:
-
这看起来不像是有意义的 typedef。你的意思是
typedef (MY_PREFIX *some_func)(void)? (另外,C++ 中的(void)是不合时宜的) -
我知道它试图定义一个函数指针。不幸的是,看起来怪异的 typedef 确实可以在 VS2008 上编译。 :-/
-
@sskanitk:不,它不是函数指针。它是一个函数类型。
-
@AndreyT,好的-谢谢。所以一个函数类型应该还是可以使用attribute, rite?
标签: c++ visual-c++ macros g++ typedef