LLVM 的 clang/clang++ 允许您为整个代码区域指定属性。语法如下:
// the following works fine under clang:
#pragma clang attribute push(__attribute__((target("sse4.2"))), apply_to=function)
void f(){}
#pragma clang attribute pop
Run Code Online (Sandbox Code Playgroud)
在此示例中,该函数f将在支持 SSE4.2 指令集的情况下进行编译。这将适用于attribute push和之间的所有函数attribute pop。
如果我们添加一个命名空间呢?
namespace joe {
#pragma clang attribute push(__attribute__((target("sse4.2"))), apply_to=function)
void g() {}
#pragma clang attribute pop
}
Run Code Online (Sandbox Code Playgroud)
它失败了'error: expected unqualified-id'。显然attribute,编译器不需要关键字。
鉴于命名空间的常见程度,这个问题有点出乎意料。当然,可以避免命名空间来解决这个问题,但这有点不雅。
有更好的解决方法吗?
我已经用所有最近的 LLVM clang++ 编译器(最高 8.0)验证了这个问题。
| 归档时间: |
|
| 查看次数: |
510 次 |
| 最近记录: |