Seuls les membres ayant 30 points peuvent parler sur le chat.

Forum Casio - Projets de programmation


Index du Forum » Projets de programmation » C2125 (E) Function returning function
Et7f3Hors ligneMembrePoints: 176 Défis: 1 Message

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


ZezombyeHors ligneRédacteurPoints: 1625 Défis: 12 Message

Citer : Posté le 28/06/2018 18:40 | #


C'est sûrement pas supporté en C89 ça
Divers jeux : Puissance 4 - Chariot Wars - Sokoban
Ecrivez vos programmes basic sur PC avec BIDE
Et7f3Hors ligneMembrePoints: 176 Défis: 1 Message

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:
#include <stdio.h>

#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:
gcc -o main *.c -std=c89 -Werror -Wall -pedantic -pedantic-errors && main

et il compile sans le moindre problème. donc c'est conforme c89
"l'impossible n'est pas français", Je suis français je suis donc capable de tout.
Cakeisalie5Hors ligneMembre de CreativeCalcPoints: 1750 Défis: 10 Message

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.

Promotion ordinaire sur les inscriptions sur Planète Casio : en ce moment, c'est gratuit !
Besoin d'utilitaires de transfert vers et depuis la calculatrice sous GNU/Linux ?

Planète Casio v42 © créé par Neuronix et Muelsaco 2004 - 2019 | Il y a 146 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd