我在头文件中定义了以下内容:
some function ...
if (table2[i] != ""){
new_table2[hash2(table2[i])] = table2[i];
table2[i] = "";
}
// std::cout << " first i : " << i << "\n";
}
for (int i=0; i < 150; ++i){
if (new_table1[i] != "" && !try_insert(new_table1[i])){
std::cout << " bad rehash : " << i << " " << new_table1[i] << "\n";
rehash();
}
}
Makefile看起来像这样:
CC=g++
CFLAGS=-Wall -Wextra -O3.
DEPS = somehash.h hashfunctions.h
OBJ = main.o
%.o: %.c $(DEPS)
$(CC) -c -o $@ $< $(CFLAGS)
main: $(OBJ)
g++ -o $@ $^ $(CFLAGS)
.PHONY: clean
clean:
rm -f *.o main
在我做完干净,制作和./main之后,“第一个i”仍然打印出来,即使它被注释掉了。当我评论出“糟糕的重拍”时,它们都没有打印出来。似乎编译器做了一些自动优化,导致它被缓存?我该如何解决?
编辑:我在另一个编辑器中打开了文件(使用Sublime),问题就消失了。似乎问题是崇高的。