endian_check.cpp
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00019 #include <stdio.h>
00020 #include <string.h>
00021
00023 enum Endian {
00024 ENDIAN_LITTLE,
00025 ENDIAN_BIG
00026 };
00027
00032 static inline void printf_endian(Endian endian)
00033 {
00034 printf("#define TTD_ENDIAN %s\n", endian == ENDIAN_LITTLE ? "TTD_LITTLE_ENDIAN" : "TTD_BIG_ENDIAN");
00035 }
00036
00043 int main (int argc, char *argv[])
00044 {
00045 unsigned char endian_test[2] = { 1, 0 };
00046 int force_BE = 0, force_LE = 0, force_PREPROCESSOR = 0;
00047
00048 if (argc > 1 && strcmp(argv[1], "BE") == 0) force_BE = 1;
00049 if (argc > 1 && strcmp(argv[1], "LE") == 0) force_LE = 1;
00050 if (argc > 1 && strcmp(argv[1], "PREPROCESSOR") == 0) force_PREPROCESSOR = 1;
00051
00052 printf("#ifndef ENDIAN_H\n#define ENDIAN_H\n");
00053
00054 if (force_LE == 1) {
00055 printf_endian(ENDIAN_LITTLE);
00056 } else if (force_BE == 1) {
00057 printf_endian(ENDIAN_BIG);
00058 } else if (force_PREPROCESSOR == 1) {
00059
00060
00061
00062
00063 printf("#ifdef __BIG_ENDIAN__\n");
00064 printf_endian(ENDIAN_BIG);
00065 printf("#else\n");
00066 printf_endian(ENDIAN_LITTLE);
00067 printf("#endif\n");
00068 } else if (*(short*)endian_test == 1 ) {
00069 printf_endian(ENDIAN_LITTLE);
00070 } else {
00071 printf_endian(ENDIAN_BIG);
00072 }
00073 printf("#endif\n");
00074
00075 return 0;
00076 }