preprocessor directives added for cpluscplus compatibility