portable use of preprocessor