Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.
La shoutbox n'est pas chargée par défaut pour des raisons de performances. Cliquez pour charger.

Forum Casio - Projets de programmation


Index du Forum » Projets de programmation » C2125 (E) Function returning function
Et7f3 Hors ligne Membre Points: 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


Zezombye Hors ligne Rédacteur Points: 1756 Défis: 13 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
Et7f3 Hors ligne Membre Points: 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.
Cakeisalie5 Hors ligne Ancien administrateur Points: 1896 Défis: 11 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 !

Mon blogBesoin d'utilitaires de transfert vers et depuis la calculatrice sous GNU/Linux ?

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 93 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