IPhone компиляция проблем с портированным кодом: переменная, имеющая то же имя, что и typedef, не может выполнить тип - PullRequest
0 голосов
/ 04 марта 2010

проверить это:

это прекрасно компилируется на iPhone:

typedef int ATYPE;

void AFunc()
{
    ATYPE ATYPE;
    ATYPE = 1337;
}

это прекрасно компилируется на iPhone:

typedef int ATYPE;
typedef ATYPE _ATYPE;

struct AStruct
{
    _ATYPE ATYPE;
};

void AFunc()
{
    AStruct bob;
    bob.ATYPE = 1337;
}

но это НЕ:

typedef int ATYPE;

struct AStruct
{
    ATYPE ATYPE;
};

void AFunc()
{
    AStruct bob;
    bob.ATYPE = 1337;
}

вышеописанное прекрасно компилируется на других платформах.

Полагаю, мы можем обойти это, выполнив второй пример, но кто-нибудь знает, почему это так?

Ответы [ 2 ]

1 голос
/ 10 марта 2010

Ну, если вам не нравится мой предыдущий ответ, вот альтернативный. Онлайн-компилятор Comeau C ++ http://www.comeaucomputing.com/tryitout/ без ошибок компилирует ваш третий пример. Учитывая, что это обычно считается золотым стандартом среди компиляторов C ++, это говорит о том, что это может быть ошибкой в ​​компиляторе G ++ в iPhone SDK (и, конечно, в других версиях G ++, на которые я ссылался в своем комментарии).

Если это правда - и у меня нет под рукой спецификации C ++, чтобы обсуждать мелкие детали - ответ на ваше «почему?» вопрос в том, что «потому что в G ++ есть странная ошибка в углу. Пожалуйста, сообщите об этом в трекере ошибок GCC, чтобы кто-нибудь это исправил».

0 голосов
/ 04 марта 2010

Это потому, что компилятор iPhone неправильно распознает, что код в первом случае является недействительным C ++, но по какой-то причине в третьем случае он правильно распознает ошибку.

Вы можете видеть, что этоНедопустимо давать типам и переменным одно и то же имя, потому что его разрешение может привести к путанице:

typedef short atype;
long long atype;
printf("%d", sizeof(atype));  // What does this print?

Довольно часто компиляторы не могут генерировать ошибки при задании неверного кода, а вместо этого компилируют его, как если быбыли правильны.Это просто происходит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...