铛:不要优化特定功能

问题描述:

很长一段时间我用gcc来编译C代码。有时我必须使用optimize("O0")属性来禁用特定功能的优化。现在我想用clang来做到这一点。铛:不要优化特定功能

假设下面的代码:

#include <stdio.h> 

void __attribute__((optimize("O0"))) blabla(void) { 
} 

int main(void) { 
    blabla(); 
    return 0; 
} 

如果我clang编译它,我得到这个错误:

test2.c:3:21: warning: unknown attribute 'optimize' ignored [-Wattributes] 
void __attribute__((optimize("O0"))) blabla(void) { 
        ^
1 warning generated. 

然后我用谷歌(和)计算器,了解属性是需要什么对于clang,因为他们中的很多人都不在标准中(只要我知道)。

我发现这个线程: In clang, how do you use per-function optimization attributes?

如果我尝试属性optimize("0")我得到这个错误:

test2.c:3:21: warning: unknown attribute 'optimize' ignored [-Wattributes] 
void __attribute__((optimize("0"))) blabla(void) { 
        ^
1 warning generated. 

如果我尝试属性optnone我得到这个错误:

test2.c:3:21: warning: unknown attribute 'optnone' ignored [-Wattributes] 
void __attribute__((optnone)) blabla(void) { 
        ^
1 warning generated. 

我也尝试在函数名后面移动属性,但它不起作用(出于某种原因,关于GCC?)警告:

test2.c:3:34: warning: GCC does not allow optnone attribute in this position on a function definition [-Wgcc-compat] 
void blabla(void) __attribute__((optnone)) { 
           ^
test2.c:3:34: warning: unknown attribute 'optnone' ignored [-Wattributes] 
2 warnings generated. 

用下面的代码另一项测试:

#include <stdio.h> 

[[clang::optnone]] 
void blabla(void) { 
} 

int main(void) { 
    blabla(); 
    return 0; 
} 

它产生:

[email protected]:/tmp/optxx$ clang test2.c 
test2.c:3:1: error: expected identifier or '(' 
[[clang::optnone]] 
^ 
test2.c:3:2: error: expected expression 
[[clang::optnone]] 
^ 
test2.c:8:5: warning: implicit declaration of function 'blabla' is invalid in C99 [-Wimplicit-function-declaration] 
    blabla(); 
    ^
1 warning and 2 errors generated. 

可能是我做错了什么,但我不能看到什么。

CNC中

clang版本:

[email protected]:/tmp/optxx$ clang -v 
Ubuntu clang version 3.3-16ubuntu1 (branches/release_33) (based on LLVM 3.3) 
Target: x86_64-pc-linux-gnu 
Thread model: posix 
+0

这应该工作。您使用的是哪个版本的铿锵声? http://clang.llvm.org/docs/AttributeReference.html#optnone-clang-optnone –

+1

[this](http://*.com/q/26266820/841108)问题 –

+1

的几乎重复应该是'void blabla (void)__attribute __((optnone)){'我相信。 – Alex

尝试以下,铛-style属性规格:

[[clang::optnone]] 
void blabla(void); 

编辑:锵3.3是非常不合时宜的。使用更新的版本,并且您的原始((optnone))代码将起作用。

+1

好吧,我会尽力更新铿锵:)谢谢你的提示。 –

+0

不幸的是,它需要很多时间来升级Ubuntu(和铿锵声),但尽快我会测试它:) –

+0

铿锵声3.7版的作品:)谢谢:) –