使用GCC' __attribute__
时,我注意到在结构中使用属性时会被忽略。
struct MyFCNPointers {
void (*MyFCNPointer)(const char *str, ...) __attribute__((__format__(printf, 1, 2)));
};
struct MyFCNPointers MyFCNPointers;
// Gives no warning at all
MyFCNPointers.MyFCNPointer("Hello %s");
然而,这有效:
void (*MyFCNPointer)(const char *str, ...) __attribute__((__format__(printf, 1, 2)));
// Gives the expected warning
MyFCNPointer("Hello %s");
这有什么理由吗?更重要的是有一个解决方法吗? (我使用结构来为函数提供命名空间。例如:X.Thread.Mutex__alloc()
)
修改
gcc -v
给出了
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1
Apple LLVM version 5.1 (clang-503.0.40) (based on LLVM 3.4svn)
Target: x86_64-apple-darwin13.3.0
Thread model: posix