gpt4 book ai didi

Clang:不要优化特定功能

转载 作者:太空狗 更新时间:2023-10-29 17:24:59 27 4
gpt4 key购买 nike

很长一段时间我都使用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.

然后我使用谷歌(还有)stackoverflow 来找出 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;
}

它产生:

user@ubuntu:/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.

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

-编辑-

clang 版本:

user@ubuntu:/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

最佳答案

尝试以下 clang 风格的属性规范:

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

编辑:Clang 3.3 已经过时了。使用更新的版本,您的原始 ((optnone)) 代码将起作用。

关于Clang:不要优化特定功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34902857/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com