我一直在试图追踪叮当中的错误,我认为我已经有了相当小的重现。这是我的计划:铛优化错误?
#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的下载铛( “苹果铛2.1”):
clang++ -Os optimizebug.cpp
并运行它,它会报告:
6b6f2be3 == 6b6f2be2! Really?
这让我觉得有点奇怪,至少可以说。如果我删除x_Is_Digit中的(unsigned char)强制转换,它将正常工作。
我遇到了叮当中的错误吗?或者我在这里做些什么导致某种未定义的行为?如果我用-O0编译它,我不会解决问题。