很長一段時間我用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
這應該工作。您使用的是哪個版本的鏗鏘聲? http://clang.llvm.org/docs/AttributeReference.html#optnone-clang-optnone –
[this](http://stackoverflow.com/q/26266820/841108)問題 –
的幾乎重複應該是'void blabla (void)__attribute __((optnone)){'我相信。 – Alex