2016-11-23 2 views
1

У меня есть этот кодмакрос в визуальной студии 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 отмечен _timerexpected an expression,

ответ

0

Я не знаю, почему это работает с gcc (теперь я знаю, после дублирования ссылки), но это действительно перекомплексировано. Более простое выражение делает то же самое и, очевидно, более переносимо.

Так что опустите фигурные скобки и полуточку.

Это будет работать:

#define _timer() ((double)(clock())/CLOCKS_PER_SEC) 

или создать реальную функцию

double _timer() { return ((double)(clock()))/CLOCKS_PER_SEC; } 

но не смесь из 2-х конструкций

+0

работает с gcc, потому что '({..})' является выражением gnu stament https://gcc.gnu.org/onlinedocs/gcc/Statement-Exprs.html ... теперь я знаю – JuanPablo

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 для макроса. И, положив точку с запятой ; и скобки {} в макросе, она не может использоваться как часть выражения.