2013-09-10 2 views
1

Я пытаюсь скомпилировать свой проект с разными компиляторами. У меня есть стабильная скомпилированная версия компиляции проекта без каких-либо ошибок с компилятором ARM 4.41. Я хочу компилировать точно такой же исходный код с компилятором ARM 5 и компилятором Win64. Как бы то ни было, без каких-либо изменений в исходном коде, просто переключив компилятор с ARM 4.41 на ARM 5 & & ARM 4.41 на Win64 Я получаю следующую ошибку с параметром typedef.Compiler Depenedent Error with typedef

Я не могу понять, почему он ведет себя так ..?

Header файл с ЬурейеЙ в - a_stdtypes.h

#define _STD_TYPE_H 
typedef unsigned char bool; // Error #84: invalid combination of type specifiers 
typedef unsigned char bit8; 
typedef unsigned short bit16; 
typedef unsigned long bit32; 
+4

не 'bool' примитивного типа C++? – lulyon

ответ

2

Это не юридический C++ кода. bool - зарезервированное ключевое слово языка - тип. Вы не можете переопределить его значение. Однако это был бы законный код.

+0

yes ... Я согласен, но то, что я пытаюсь решить, сообщает об ошибке с изменением в компиляторе. Независимо от компилятора код остается неизменным. Есть ли у вас какие-либо идеи для отладки или чего-то другого. –

+2

Либо вы сейчас компилируете код C как код C++ (возможно, в новой версии компилятор использует другой язык по умолчанию), или поддержка компилятора C++ улучшилась с изменением версии, поэтому теперь он корректно отклоняет неверный код. Вам придется проконсультироваться с документацией компилятора, в частности «что нового в 5». – Angew

1

Я думаю, это было написано, потому что кто-то хочет определить bool для C, тогда кто-то хочет использовать его с C++.

аккуратнее решение использовать cplusplus макрос, например:

#ifndef __cplusplus 
typedef unsigned char bool; 
#endif 
typedef unsigned char bit8; 
typedef unsigned short bit16; 
typedef unsigned long bit32; 
+1

Вам не хватает точки с запятой - и я бы сказал, что лучшим определением является 'typedef enum {false, true} bool;'. Кроме того, для C99 'typedef' можно заменить на' #include '. –

+0

вы правы для всех ваших комментариев, но я старался не слишком сильно менять его код. и я больше не пропускаю точку с запятой ... :) – SHR