我有这段代码
// show_time.c
#include <time.h>
#include <stdio.h>
#define _timer() ({((double)(clock()))/CLOCKS_PER_SEC;})
int main() {
int i, j;
double timer = _timer();
for (i = 0; i < 1000; i++)
for (j = 0; j < 10000; j++)
i*j;
printf("%f", _timer() - timer);
return 0;
}
gcc
工作正常,我有时间。但在Visual Studio 2015中,_timer
已标记,我收到消息expected an expression
,
答案 0 :(得分:1)
请试试这个
#include <time.h>
#include <stdio.h>
#define TIMER (((double)clock()) / CLOCKS_PER_SEC)
int main() {
int i, j;
double timer = TIMER;
for (i = 0; i < 1000; i++) {
for (j = 0; j < 10000; j++) {
i*j;
}
}
printf("%f", TIMER - timer);
return 0;
}
节目输出
0.018000
请注意我使用UPPERCASE名称作为宏。通过在宏中放置分号;
和大括号{}
,它不能用作表达式的一部分。
答案 1 :(得分:0)
我不知道为什么它适用于gcc(现在我知道在关注重复链接之后),但它确实过于复杂。一个更简单的表达式也是如此,显然更具可移植性。
所以放下花括号和分号。
这将有效:
#define _timer() ((double)(clock())/CLOCKS_PER_SEC)
或创建一个真正的功能
double _timer() { return ((double)(clock()))/CLOCKS_PER_SEC; }
但不是2种结构的混合