J'ai implémenté une fonction appelée abs(). Je reçois cette erreur:Fonction intrinsèque, impossible à définir (C)
Intrinsic function, cannot be defined
Qu'ai-je fait de mal? J'utilise Visual Studio 2005.
J'ai implémenté une fonction appelée abs(). Je reçois cette erreur:Fonction intrinsèque, impossible à définir (C)
Intrinsic function, cannot be defined
Qu'ai-je fait de mal? J'utilise Visual Studio 2005.
Intrinsic function, cannot be defined
Dans ce cas, intrinsic signifie que le compilateur déjà a une mise en œuvre d'une fonction appelée abs
, et que vous ne pouvez pas redéfinir.
Solution? Remplacez par le nom de votre fonction par exemple, snakile_abs
par exemple.
Consultez la documentation de MSDN sur la fonction abs
pour plus d'informations.
Le problème n'est pas dans un en-tête ou non. Le problème est que les fonctions intrinsèques, c'est-à-dire les fonctions que le compilateur reconnaît et implémente lui-même, généralement avec des optimisations qui ne seraient pas disponibles dans le seul code C, ne peuvent pas être définies.
Les noms des fonctions mathématiques (voir math.h)
Les noms des fonctions mathématiques préfixés par « f » ou « l ».
Sont réservés pour l'implémentation.
La définition de static int abs(int x) { ... }
devrait être légale, mais simplement int abs(int x) { ... }
a un comportement indéfini, et donc une chose raisonnable qu'une compilation pourrait faire est d'émettre une erreur.
Certains en-têtes peuvent toujours avoir '#define abs __builtin_magic_abs' ou leur équivalent. Puisque le préprocesseur voit le texte en premier, vous essayez toujours de définir 'static int __buildin_magic_abs (int x) {...}'. Puisque abs() est un nom défini dans la bibliothèque standard C, il est probable qu'il ne soit pas judicieux (et certainement pas portable) de tenter de le remplacer par son nom. – RBerteig
Tant que vous n'incluez pas un entête définissant 'abs' ou' # undef' avant de définir votre propre version, le standard vous permet de le remplacer par une fonction 'static'. Le remplacement de la version 'extern' est un comportement indéfini. –
Merci. Pouvez-vous donner un exemple? Que voulez-vous dire par "compilateur ... se met en œuvre"? Que faire si j'ai besoin d'utiliser cette fonction abs()? – snakile
@sna '#include' –
Artefacto
J'inclus. Ca ne marche toujours pas –
snakile