xiaoxiang781216 commented on a change in pull request #2222: URL: https://github.com/apache/incubator-nuttx/pull/2222#discussion_r526558013
########## File path: arch/sim/include/inttypes.h ########## @@ -44,7 +44,7 @@ * Pre-processor Definitions ****************************************************************************/ -#if defined(CONFIG_HOST_MACOS) +#if defined(CONFIG_HOST_MACOS) && defined(__APPLE_CC__) || !defined(_LP64) Review comment: If I undersand correctly, macOS has two cases: 1. Compile the image with clang(`__INT64_TYPE__ == long long`) 2. Compile the module with gcc(`__INT64_TYPE__ == long`) In the first case, both CONFIG_HOST_MACOS and `__APPLE_CC__` are defined In the second case, CONFIG_HOST_MACOS is defined, but `__APPLE_CC__` isn't. So the following definition should be good: ``` #if defined(__APPLE_CC__) typedef signed long long _int64_t; typedef unsigned long long _uint64_t; #else typedef signed long _int64_t; typedef unsigned long _uint64_t; #endif ``` If we consider Linux 32bit mode(`__INT64_TYPE__ == long long`), it become: ``` #if defined(__APPLE_CC__) || !defined(_LP64) typedef signed long long _int64_t; typedef unsigned long long _uint64_t; #else typedef signed long _int64_t; typedef unsigned long _uint64_t; #endif ``` Actually, the real difference is which compiler is used(gcc or clang), clang could be detected by `__APPLE_CC__`. the typedef for gcc is same for macOS and Linux(but 32bit/64bit mode has the different typedef). ---------------------------------------------------------------- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: us...@infra.apache.org