add extern "C"