60 lines
819 B
C
60 lines
819 B
C
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
|
|
struct ScopeCount
|
|
{
|
|
int count;
|
|
int is_alias;
|
|
void *item;
|
|
};
|
|
|
|
int scope_count(void *item, int is_alias)
|
|
{
|
|
struct ScopeCount sc;
|
|
sc.count = 0;
|
|
sc.is_alias = 0;
|
|
sc.item = item;
|
|
|
|
sc.count++;
|
|
sc.is_alias = is_alias;
|
|
|
|
return sc.count;
|
|
}
|
|
|
|
void end_scope(struct ScopeCount *sc)
|
|
{
|
|
if (sc->count == 0)
|
|
{
|
|
free(sc->item);
|
|
}
|
|
sc->count--;
|
|
}
|
|
|
|
struct ScopeCount do_something()
|
|
{
|
|
struct ScopeCount sc;
|
|
sc.count = 1;
|
|
sc.is_alias = 0;
|
|
|
|
sc.item = malloc(sizeof(int));
|
|
|
|
*(int *)sc.item = 67;
|
|
|
|
end_scope(&sc);
|
|
|
|
return sc;
|
|
}
|
|
|
|
int main()
|
|
{
|
|
struct ScopeCount sc = do_something();
|
|
|
|
printf("value: %d\n", *(int *)sc.item);
|
|
|
|
end_scope(&sc);
|
|
|
|
printf("value: %d\n", *(int *)sc.item);
|
|
|
|
return 0;
|
|
}
|