La Confusion au sujet de statique pointeur de fonction en c
Consulter l'extrait de code suivant. Il a été écrit en 2005, mais je suis pour le compiler avec la dernière version de gcc.
xln_merge_nodes_without_lindo(coeff, cand_node_array, match1_array, match2_array)
sm_matrix *coeff;
array_t *cand_node_array, *match1_array, *match2_array;
{
node_t *n1, *n2;
sm_row *row1, *row2;
static sm_row *xln_merge_find_neighbor_of_row1_with_minimum_neighbors();
while (TRUE) {
row1 = sm_shortest_row(coeff);
if (row1 == NIL (sm_row)) return;
n1 = array_fetch(node_t *, cand_node_array, row1->row_num);
row2 = xln_merge_find_neighbor_of_row1_with_minimum_neighbors(row1, coeff);
n2 = array_fetch(node_t *, cand_node_array, row2->row_num);
array_insert_last(node_t *, match1_array, n1);
array_insert_last(node_t *, match2_array, n2);
xln_merge_update_neighbor_info(coeff, row1, row2);
}
}
Lors de la compilation,il se plaint,
xln_merge.c:299:18: error: invalid storage class for function ‘xln_merge_find_neighbor_of_row1_with_minimum_neighbors’
(xln_merger.c:299 est ligne 3 après la définition commence).
Ligne 3 définition de la fonction semble être une déclaration de fonction (n'est-ce pas???). Le programmeur avait l'intention d'écrire un pointeur de fonction (statique)? Ou certains de la syntaxe a changé au cours du temps en c pourquoi ce n'est pas la compilation.
Ce code est à partir de sis
paquet ici
OriginalL'auteur Dilawar | 2012-07-29
Vous devez vous connecter pour publier un commentaire.
Bien que rare, il est tout à fait valable, et la norme de déclarer une fonction à l'intérieur d'un autre. Cependant, le modificateur static n'a pas de sens dans une déclaration sans un corps, et vous ne pouvez pas:* * * définir votre fonction à l'intérieur d'une autre fonction.
Je ne peux pas savoir l'origine du programmeur intentions, mais en aucune façon peut-être un pointeur de fonction car il n'y a pas d'affectation.
* En fait, vous peut comme GCC extension
OriginalL'auteur cnicutar
J'ai été confrontée au même problème que le message d'erreur garder à dire que:
La solution Simple à ce problème est "il est certains accolade manquante dans le fichier à partir duquel j'obtiens ces erreurs."
Il suffit d'aller dans l'exemple ci-dessous.
Par exemple:
donnera
À la suite de la "non valide de classe de stockage pour la fonction" erreurs.
Donc.. Juste en gardant un œil sur les accolades pourrait probablement résoudre cette erreur.
Utilisation
grep -e [{}] code.c
de trouver facilement où est l'absence de corset.OriginalL'auteur user3140263
Au moins pour GCC, il donnera le "non valide de classe de stockage pour la fonction" si il ya une déclaration dans un fichier inclus. Vous pouvez retourner à vos fichiers d'en-tête et de regarder pour ce qui est censé être un acte de déclaration et à la place est une pendaison de fonctions telles que
inclus dans xxx.h fichier:
de l'ouverture "{" vraiment confond GCC et jeter les erreurs aléatoires dernier. Il est très facile d'en faire une copie et le passé d'une fonction et d'oublier de remplacer les { avec une ;
En particulier, si vous utilisez mon bien-aimé 1TBS
OriginalL'auteur MountainLogic