over fout C212 in keilC51

H

hero0765

Guest
hi: toen ik de opstelling van de onderstaande code, de keil51 emergered een fout: error C212: indirecte oproep: parameters niet passen binnen de registers. broncode: typedef struct NODE {struct NODE * link; int waarde;} NODE, int compare_ints (void const * a, nietig const * b) {if (* (int *) a == * (int *) b) terugkeer 0; anders return 1;} NODE * search_list (NODE * knooppunt, nietig const * waarde, int (* vergelijken) (void const *, nietig const *)) {while (! knooppunt = NULL) {if (vergelijk (en node- > waarde, waarde) == 0) / / error Point Break; knoop = knoop -> link;} return knooppunt;} int main () {NODE * huidig, * wortel; int waarde; huidig ​​= search_list (wortel, en waarde, compare_ints);} ik kan vinden waar de fout gebeuren, markeer ik met een "fout point" in de code. het vergelijken ()-functie pointer niet kan worden voorzien in parameters, of het compile geeft een alarm. Ik weet niet waarom.
 
Naar mijn mening, de toelichting in de C51 Help-bestand is vrij duidelijk:
Een indirecte functie-aanroep via een pointer kan niet bevatten actuele parameters. Een uitzondering op deze regel is als alle parameters kunnen worden doorgegeven in de registers. Dit komt door de methode van parameter passing werkzaam C51. De naam van de opgeroepen functie worden bekend om parameters worden geschreven in de data segment van het opgeroepen functie. Voor indirecte gesprekken, echter, is de naam van de aangeroepen functie niet bekend.
Met andere woorden, u te veel van een kleine 8-bit processor verwacht en het is beperkte middelen.
 
Dit is de beschrijving van de fout in de Keil handleidingen [url = http://www.keil.com/support/man/docs/c51/c51_c212.asp] Cx51 User's Guide: Fout C212 (*** Error C212.) [/url] Het probleem is zoeklijst is het nemen van een functie als zijn argumenten. U moet uw code te vereenvoudigen. - Amr
 
ik [URL = "http://www.edaboard.com/member235402.html"] Millwood [/URL] 's [URL = " http://www.edaboard.com/thread186772.html # post781043 "] antwoord [/URL]. Zoals [URL = "http://www.edaboard.com/thread186728.html # post780868"] FVM [/URL] en [URL = "http://www.edaboard.com/thread186728.html # post780908"] amraldo [/URL] woorden, het is eenvoudig op te lossen 'Fout C212' via vele manieren! EX: tot en met 1 generieke pointer alleen te gebruiken
Code:
 int compare_ints (void const ** p) {if (* (int *) p [0] == * (int *) p [1]) return 0; anders return 1;}
Code:
 NODE * search_list (NODE * knooppunt, nietig const * waarde, int (* vergelijken) (void const **)) {void * p [2 ] * (p +1) = waarde, terwijl (node ​​= LEEG!) {* p = & node-> waarde, als (vergelijk (p) == 0) break; knoop = knoop -> link;} return knooppunt; }
.....
 

Welcome to EDABoard.com

Sponsor

Back
Top