我有一个如下所示的循环,我认为问题在于内部for循环标记为"请参阅此处"。问题是什么?
// measure time to write different sizes of data
for (int i = 0; i < sizeof(sizes)/sizeof(int); i++) {
lengthMod = sizes[i]/sizeof(int) - 1;
start = wall_clock_time();
for (unsigned int j = 0; j < 10; j++) // << See here!!!
tmp = 1;
// force any write back cache to flush. read from other data source
for (unsigned int j = 0; j < REPS; j++) // << Or here!!!
tmp = j;
end = wall_clock_time();
timeTaken = ((float)(end - start))/1000000000;
fprintf(stderr, "%d, %1.2f \n", sizes[i]/1024, ((float)(end - start))/1000000000);
}
您可以看到 full source on GitHub 〜第32行
g++ -O3 cache-write.cpp -o cache-write -lrt
cache-write.cpp: In function ‘int main()’:
cache-write.cpp:36:27: error: expected primary-expression before ‘;’ token
cache-write.cpp:36:27: error: expected ‘)’ before ‘;’ token
cache-write.cpp:36:29: error: name lookup of ‘j’ changed for ISO ‘for’ scoping [-fpermissive]
cache-write.cpp:36:29: note: (if you use ‘-fpermissive’ G++ will accept your code)
cache-write.cpp:36:32: error: expected ‘;’ before ‘)’ token
cache-write.cpp:44:11: error: ‘data1’ was not declared in this scope
make: *** [cache-write] Error 1
答案 0 :(得分:4)
不使用声明REPS的#define,而是使用
const unsigned int REPS = whatever;
通常在C ++中避免使用#define,因为它很容易导致你遇到的那种问题。
答案 1 :(得分:3)
REPS定义结尾处有一个半冒号:
#define REPS 128 * MB;