我正在尝试编译一个没有使用优化的特定函数,clang以防止某些与安全相关的调用memset()被优化掉.
根据可在此处找到的文档,存在optnone允许此属性的属性.此外,这里可以找到一个例子.
不幸的是,(至少在clangOS X 10.9.5 的下面版本中),这会导致编译器警告,如本示例所示:
$ clang --version
Apple LLVM version 6.0 (clang-600.0.51) (based on LLVM 3.5svn)
Target: x86_64-apple-darwin13.4.0
Thread model: posix
$ cat optnone.c
#include <string.h>
__attribute__((optnone)) void*
always_memset(void *b, int c, size_t len)
{
return memset(b, c, len);
}
$ clang -Wall -O3 -c -o optnone.o optnone.c
optnone.c:3:16: warning: unknown attribute 'optnone' ignored [-Wattributes]
__attribute__((optnone)) void*
^
1 warning generated.
Run Code Online (Sandbox Code Playgroud)
我也尝试过使用#pragma clang optimize off …