2009-08-09 4 views
0
#include <stdio.h> 
#include <stdlib.h> 
#include <time.h> 

static struct tm createDate(unsigned day, unsigned mon, int year) { 
     struct tm b = {0,0,0,day,mon-1,year-1900}; return b; 
} 

static int dateExceeded(unsigned day, unsigned mon, int year) { 
    struct tm b = createDate(day,mon,year); 
    time_t y = mktime(&b), now; 
    time(&now); // error C2143: syntax error : missing ';' before 'type' 
    double diff = difftime(y, now)/(60 * 60 * 24); // error C2065: 'diff' : undeclared identifier 
    return (diff < 0); 
} 

static void randomEvent(){ 
    srand(time(NULL)); 
    if (rand()%10) { 
      printf("Do something here\n"); // C2143: syntax error : missing ';' before 'type' 
    } 
} 
+0

Visual C++, je comprends? –

+0

est un type non signé? – Zed

+0

@Matthew: Très probablement, d'autant plus qu'il se compile parfaitement sous GCC. – hbw

Répondre

5

Si vous compilez ceci comme code C89, vous devez déclarer les variables au début des blocs. Vous ne pouvez pas déclarer double diff au milieu du bloc:

static int dateExceeded(unsigned day, unsigned mon, int year) { 
    double diff; 
    struct tm b = createDate(day,mon,year); 
    time_t y = mktime(&b), now; 
    time(&now); 
    diff = difftime(y, now)/(60 * 60 * 24); 
    return (diff < 0); 
} 
0

Hmm, je ne semble pas être en mesure de reproduire cela. En utilisant votre code exact:

1>------ Build started: Project: so_1251288, Configuration: Debug Win32 ------ 
1>Compiling... 
1>so_1251288.cpp 
1>c:\users\matthew iselin\documents\visual studio 2008\projects\so_1251288\so_1251288\so_1251288.cpp(21) : warning C4244: 'argument' : conversion from 'time_t' to 'unsigned int', possible loss of data 
1>Linking... 
1>Build log was saved at *snip* 
1>so_1251288 - 0 error(s), 1 warning(s) 
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ========== 

J'ai supposé que vous utilisez Visual C++. Quelle version utilisez-vous? Quel est votre environnement configuré en tant que? La seule chose à laquelle je peux penser est que vous avez involontairement activé Unicode plutôt que le codage de caractères multi-octets ... Mais cela ne devrait pas causer les erreurs que vous voyez.

EDIT: Je ne peux même pas reproduire en créant une application Visual C++ CLR et en collant directement votre code. Nous avons besoin de plus d'informations pour pouvoir diagnostiquer le problème.

EDIT 2: En fait, je peux reproduire, quand je compile comme C (/ TC) plutôt que le code C++ (/ TP). Comme cela a déjà été mentionné, C89 exige que les variables soient définies au début des fonctions, ce qui entraîne l'échec de votre code.

+0

Compilez-le en tant que code C (pas C++) et vous verrez. –

+0

Oui, j'ai testé ça juste après avoir lu votre réponse :) –

0

Il y a aussi une erreur dans le code. Vous devriez appeler srand une seule fois dans la vie du programme. Si vous appelez srand à chaque fois avant rand(), il peut arriver que vous obteniez les mêmes valeurs encore et encore.

0
ISO C90 forbids mixed declarations and code 
Questions connexes