C2125 (E) Function returning function
Posté le 28/06/2018 16:07
Bonjour cher amis,
J'ai cette erreur dans le fxsdk:
C2125 (E) Function returning function
mon code dans un fichier .h
# ifdef USE_LCA
# define LCA lca_
# else
# define LCA __
# endif
#define PASTER(x,y) x ## _ ## y
#define EVALUATOR(x,y) PASTER(x,y)
#define NAME(fun) EVALUATOR(LCA, fun)
celui la dans un fichier c inclus dans le projet
void NAME(test)(void)
{
locate(1,4);
Print((unsigned char*)"This application is");
}
et ça dans l'équivalent du main
lca_test();
et dans le fichier contenant l'équivalent du main ces en tetes
#define USE_LCA
#include "src\\__libcASIO.h"
J'ai fait ce code avec une astuce d'ici
https://stackoverflow.com/questions/1489932/how-to-concatenate-twice-with-the-c-preprocessor-and-expand-a-macro-as-in-arg
Je cherche a donner un préfixe a des fonctions non publique lorsqu'elle sont non publique style "__" et un autre si l'utilisateur réclame qu'elle soit publique "lca"
Cela marche sur gcc.
Pouvez-vous m'aidez ? Demandez-moi toutes informations complémenaires.
Cordialement
Merci
Citer : Posté le 28/06/2018 18:40 | #
C'est sûrement pas supporté en C89 ça
Ecrivez vos programmes basic sur PC avec BIDE
Citer : Posté le 28/06/2018 20:40 | #
Bonjour Zezombye,
Du c89 c'est pas du c99 t'es sur ?
Aurais tu une idée pour aboutir à mon but ?
merci d'avance pour ta réponse.
EDIT:
J'ai tester ce code:
#define VARIABLE 3
#define NAME2(fun,suffix) fun ## _ ## suffix
#define NAME1(fun,suffix) NAME2(fun,suffix)
#define NAME(fun) NAME1(fun,VARIABLE)
int NAME(some_function)(int a){printf("ok\n");return 0;}
int main()
{
some_function_3(5);
printf("Hello, World!\n");
return 0;
}
avec la commande gcc 7.2.1 suivante:
et il compile sans le moindre problème. donc c'est conforme c89
Citer : Posté le 08/07/2018 15:51 | #
Coucou,
pour ceux qui en doutent, si, l'opérateur ## existe en ANSI C (C89, même avant que l'ISO reprenne ça à son compte) :
Et en ISO C99, du coup :
Après, tu feras gaffe, j'ai fait quelques tests sur GCC pour voir et les noms que tu produits c'est lca__test et ___test (un underscore en trop), vire l'underscore que tu concatènes dans PASTER(x,y) (histoire de passer à une logique de préfixes).
Quant à l'origine de l'erreur C2125 que tu rencontres, je ne pense pas qu'elle vienne de ce code-là (j'ai enquêté dans le manuel mais il semble que l'opérateur ## soit supporté, c.f. les erreurs C5050 et C5051)… je ne saurais donc te dire.