2017-05-24 4 views
-1

Je suis en train de générer des nombres aléatoires mais avec cette graineUtiliser `rdtsc`: erreur C2065

int rdtsc()   
{ 
    __asm__ __volatile__("rdtsc"); 
} 

Mais quand je tente de compiler j'obtenir cette erreur:

error C2065: '__asm__' : identificador no declarado 
error C2146: error de sintaxis : falta ';' delante del identificador '__volatile__' 

Que dois-je devoir faire? Existe-t-il un autre moyen de générer de vrais nombres aléatoires plutôt que via time(null)?

+2

Je vous attends vous essayez d'utiliser l'assembleur en ligne dans une version x64, que Visual Studio ne prend pas en charge (pour une raison inconnue). Notez que vous ne pouvez pas générer de "vrais" nombres aléatoires (sans support matériel) - vous ne pouvez générer que des nombres * pseudo-aléatoires *. –

+1

Utilisez random_device ou recherchez rand_s sur msdn.microsoft.com. – user515430

+2

C'est la syntaxe gcc. Si vous utilisez visual studio, alors c'est '' __asm ​​rdtsc; '' 0asm \ rdtsc; ' –

Répondre

3

La version 64 bits de Visual C++ ne prend pas en charge l'assembly en ligne, mais fournit des fonctions intégrées pour l'instruction la plus spéciale, like rdtsc.

Donc pas besoin d'écrire ce code vous-même.


Et même si vous utilisez le compilateur 32 bits, la syntaxe de montage n'est pas

__asm__ __volatile__("rdtsc"); 

mais juste

__asm rdtsc 
+0

Merci beaucoup :) – Deivbid