视觉工作室2015中的宏:预期表达

时间:2016-11-23 19:46:20

标签: c visual-studio-2015

我有这段代码

// 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

2 个答案:

答案 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种结构的混合