attendu identifiant ou ‘(’ avant ‘pour’
/** @file alloc.c */
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#define NEW_BLOCK_SIZE 1024
#define ARRAY_SIZE 31
typedef struct _metadata_mem
{
size_t size;
void * addr ;
struct _metadata_mem * next_free ;
struct _metadata_mem * pre_free;
char * unit ;
} metadata_mem;
#define SIZE_OF_MATEDATA sizeof(metadata_mem)
metadata_mem * array_of_block[31] ;
int i;
for(i=0; i<31; i++){
array_of_block[i]=NULL;
}
int index(size_t size){
int count=0;
while((int)size>=2){
size/=2;
count++;
}
return count ;
}
J'ai reçu l'erreur suivante et il commence dans la boucle for:
gcc alloc.c -O3 -Wextra -Wall -Werror -Wno-unused-result -Wno-unused-parameter -o alloc.so -shared -fPIC
alloc.c:30:2: error: expected identifier or ‘(’ before ‘for’
alloc.c:30:12: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘<’ token
alloc.c:30:26: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘++’ token
alloc.c:35:5: error: conflicting types for ‘index’
make: *** [alloc.so] Error 1
Je n'ai aucune idée de quel est le problème avec la boucle for. Il semble OK. Ne suis-je pas censé initialisé le array_of_block dans le contexte mondial ?
Merci beaucoup.
Où est la fonction main ()?
C est pas un langage de script.
Aussi, il ya un moyen plus facile de faire ce que vous voulez avec ce tableau à l'aide de
Faute de frappe: SIZE_OF_MATEDATA 🙂
NULL n'est pas garanti d'être le même que 0x0 dans la mémoire, donc, techniquement, memset() est une erreur pour la rédaction des pointeurs NULL. Dans la pratique, il fonctionne généralement parce que NULLE habituellement est vraiment 0x0 dans la mémoire.
C est pas un langage de script.
Aussi, il ya un moyen plus facile de faire ce que vous voulez avec ce tableau à l'aide de
memset
.Faute de frappe: SIZE_OF_MATEDATA 🙂
NULL n'est pas garanti d'être le même que 0x0 dans la mémoire, donc, techniquement, memset() est une erreur pour la rédaction des pointeurs NULL. Dans la pratique, il fonctionne généralement parce que NULLE habituellement est vraiment 0x0 dans la mémoire.
OriginalL'auteur Calvin Hu | 2013-09-18
Vous devez vous connecter pour publier un commentaire.
Le code doit être à l'intérieur d'une fonction. Si ce code est le seul code dans le programme, la fonction est appelée "main". Dans son (presque) forme la plus simple:
int main
La définition complète ne retourne pas uniquement de type int, mais prend également argc/argv/env. J'allais pour des raisons de simplicité...
le problème est que j'ai besoin d'initialiser ce tableau de metadata_mem dans le contexte mondial, de sorte que je peux y accéder dans les fonctions suivantes (que je n'ai pas mis ici). Quelles sont les autres façons d'initialiser toutes ses entrées à null dans le contexte mondial ?
La valeur de retour de
main
doit toujours êtreint
, sinon c'est un comportement indéfini. J'ai vu que vous avez mis à jour, +1 maintenant.Comment au sujet de programmes, où vous ne voulez jamais de retour de main?
OriginalL'auteur David Sainty
Ça fait un moment, mais que "pour" déclaration doit être enveloppé dans une fonction, n'est-ce pas? Ne pensez pas que vous pouvez faire, les déclarations dans le fichier de niveau bloc.
OriginalL'auteur John Pirie