# include <stdio.h>
/* Demo code showing the usage of the cleanup variable
attribute. See:http://g...content-available-to-author-only...u.org/onlinedocs/gcc/Variable-Attributes.html
*/
/* cleanup function
the argument is a int * to accept the address
to the final value
*/
void clean_up(int *final_value)
{
printf("Final value: %d\n",*final_value
);
}
int main(int argc, char **argv)
{
/* declare cleanup attribute along with initiliazation
Without the cleanup attribute, this is equivalent
to:
int avar = 1;
*/
int avar __attribute__ ((__cleanup__(clean_up))) = 1;
avar = 5;
return 0;
}
ICAgICMgaW5jbHVkZSA8c3RkaW8uaD4KICAgICAKICAgIC8qIERlbW8gY29kZSBzaG93aW5nIHRoZSB1c2FnZSBvZiB0aGUgY2xlYW51cCB2YXJpYWJsZQogICAgICBhdHRyaWJ1dGUuIFNlZTpodHRwOi8vZy4uLmNvbnRlbnQtYXZhaWxhYmxlLXRvLWF1dGhvci1vbmx5Li4udS5vcmcvb25saW5lZG9jcy9nY2MvVmFyaWFibGUtQXR0cmlidXRlcy5odG1sCiAgICAqLwogICAgIAogICAgLyogY2xlYW51cCBmdW5jdGlvbgogICAgICB0aGUgYXJndW1lbnQgaXMgYSBpbnQgKiB0byBhY2NlcHQgdGhlIGFkZHJlc3MKICAgICAgdG8gdGhlIGZpbmFsIHZhbHVlCiAgICAqLwogICAgIAogICAgdm9pZCBjbGVhbl91cChpbnQgKmZpbmFsX3ZhbHVlKQogICAgewogICAgICBwcmludGYoIkNsZWFuaW5nIHVwXG4iKTsKICAgICAgcHJpbnRmKCJGaW5hbCB2YWx1ZTogJWRcbiIsKmZpbmFsX3ZhbHVlKTsKICAgICAKICAgIH0KICAgICAKICAgIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKICAgIHsKICAgICAgLyogZGVjbGFyZSBjbGVhbnVwIGF0dHJpYnV0ZSBhbG9uZyB3aXRoIGluaXRpbGlhemF0aW9uCiAgICAgICAgV2l0aG91dCB0aGUgY2xlYW51cCBhdHRyaWJ1dGUsIHRoaXMgaXMgZXF1aXZhbGVudAogICAgICAgIHRvOgogICAgICAgIGludCBhdmFyID0gMTsKICAgICAqLwogICAgIAogICAgICBpbnQgYXZhciBfX2F0dHJpYnV0ZV9fICgoX19jbGVhbnVwX18oY2xlYW5fdXApKSkgPSAxOwogICAgICBhdmFyID0gNTsKICAgICAKICAgICAgcmV0dXJuIDA7CiAgICB9