2015-08-14 15 views
6

C'è un modo per inizializzare una variabile con l'attributo del compilatore cleanup? o devo impostare il valore dopo aver dichiarato la variabile?Come inizializzare la variabile con l'attributo cleanup?

Ho provato a inserire l'attributo cleanup davanti a = malloc(10); come nell'esempio seguente e dietro = malloc(10); ma non compila.

#include <stdio.h> 
#include <stdlib.h> 

static inline void cleanup_buf(char **buf) 
{ 
    if(*buf == NULL) 
    { 
     return; 
    } 

    printf("Cleaning up\n"); 

    free(*buf); 
} 

#define auto_clean __attribute__((cleanup (cleanup_buf))); 

int main(void) 
{ 
    char *buf auto_clean = malloc(10); 
    if(buf == NULL) 
    { 
     printf("malloc\n"); 
     return -1; 
    } 

    return 0; 
} 

C'è una sintassi diversa per l'utilizzo di cleanup e inizializzare la variabile su una linea? O devo impostare il valore dopo aver dichiarato la variabile come nell'esempio qui sotto?

#include <stdio.h> 
#include <stdlib.h> 

static inline void cleanup_buf(char **buf) 
{ 
    if(*buf == NULL) 
    { 
     return; 
    } 

    printf("Cleaning up\n"); 

    free(*buf); 
} 

/* Use this attribute for variables that we want to automatically cleanup. */ 
#define auto_clean __attribute__((cleanup (cleanup_buf))); 

int main(void) 
{ 
    char *buf auto_clean; 

    buf = malloc(10); 
    if(buf == NULL) 
    { 
     printf("malloc\n"); 
     return -1; 
    } 

    return 0; 
} 

risposta

3

Just mistypo. solo ...

//#define auto_clean __attribute__((cleanup (cleanup_buf))); 
//              ^
#define auto_clean __attribute__((cleanup (cleanup_buf))) 
Problemi correlati