首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Clang:不优化特定函数

Clang:不优化特定函数
EN

Stack Overflow用户
提问于 2016-01-20 22:33:19
回答 1查看 10.1K关注 0票数 11

在很长一段时间里,我使用gcc来编译C代码。有时,我必须使用optimize("O0")属性来禁用对特定函数的优化。现在我喜欢用clang来做这件事。

假设代码如下:

代码语言:javascript
运行
复制
#include <stdio.h>

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

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

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

代码语言:javascript
运行
复制
test2.c:3:21: warning: unknown attribute 'optimize' ignored [-Wattributes]
void __attribute__((optimize("O0"))) blabla(void) {
                    ^
1 warning generated.

然后我使用google (还有) stackoverflow来找出clang需要什么属性,因为它们中的许多都不在标准中(据我所知)。

我找到了这个帖子:In clang, how do you use per-function optimization attributes?

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

代码语言:javascript
运行
复制
test2.c:3:21: warning: unknown attribute 'optimize' ignored [-Wattributes]
void __attribute__((optimize("0"))) blabla(void) {
                    ^
1 warning generated.

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

代码语言:javascript
运行
复制
test2.c:3:21: warning: unknown attribute 'optnone' ignored [-Wattributes]
void __attribute__((optnone)) blabla(void) {
                    ^
1 warning generated.

我也试着把属性移到函数名后面,但是不起作用(由于某种原因,出现了关于GCC的警告?!):

代码语言:javascript
运行
复制
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.

使用以下代码的另一个测试:

代码语言:javascript
运行
复制
#include <stdio.h>

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

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

它产生:

代码语言:javascript
运行
复制
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版本:

代码语言:javascript
运行
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-20 22:43:33

尝试以下clang样式的属性规范:

代码语言:javascript
运行
复制
[[clang::optnone]]
void blabla(void);

编辑:Clang3.3已经相当过时了。使用更新的版本,您的原始((optnone))代码就可以工作了。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34902857

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档