【发布时间】:2011-09-21 15:59:45
【问题描述】:
我一直在尝试找出看起来像是 clang 中的错误的东西,并且我认为我已经得到了相当少的复制。这是我的程序:
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define x_Is_Digit(x) isdigit((unsigned char) (x))
void Odd_Behavior(char * version)
{
char * ptr, *tmp;
for (ptr = version; x_Is_Digit(*ptr); ptr++);
ptr++;
for (tmp = ptr; x_Is_Digit(*ptr); ptr++);
if (ptr == tmp)
printf("%08x == %08x! Really?\n", ptr, tmp);
}
int main()
{
char buffer[100];
strcpy(buffer, "3.8a");
Odd_Behavior(buffer);
return(0);
}
当我使用优化编译它时,在 Xcode 下载中包含的 clang(“Apple clang 2.1”)中:
clang++ -Os optimizebug.cpp
运行它,它会报告:
6b6f2be3 == 6b6f2be2! Really?
至少可以这么说,这让我觉得有点奇怪。如果我删除 x_Is_Digit 中的 (unsigned char) 转换,它可以正常工作。
我在 clang 中遇到了错误吗?还是我在这里做的事情会导致某种未定义的行为?如果我用 -O0 编译它,我不会得到问题。
【问题讨论】:
标签: optimization clang