iPhone: Создание игр для iOS (iPhone и iPad)
GameDev.ru / Сообщества / iPhone / Форум / Xcode печаль.

Xcode печаль.

SergioУдалёнwww8 авг. 201213:59#0
Будьте внимательны при написании программ в Xcode. Вот совершенно правильный с его точки зрения исходный код (компилируется без единого предупреждения):
#include <stdio.h>

class TestClass {
public:
  TestClass()
    { printf("A created\n"); }
  void printContents()
    { printf("Int: %d\nFloat: %f\n", v1, v2); }
  
private:
  int v1;
  float v2;
};

TestClass getRandomClass() { }
int getRandomNumber() { }

int main(int argc, char **argv)
{
  TestClass a = getRandomClass();
  a.printContents();
  printf("%d, %d, %d, %d\n" , getRandomNumber(), getRandomNumber(), getRandomNumber(), getRandomNumber() );
  return 0;
}

В лучшем случае вы получите предупреждение о том, что в конце файла нет новой строки.

Изображение

Лечение


В настройках проекта следует включить предупреждение "Mismatched Return Type", которое по умолчанию выключено.
SergioУдалёнwww8 авг. 201214:01#1
КирюшыкЗабаненwww8 авг. 201214:03#2
А у парня противоположные проблеммы:
http://stackoverflow.com/questions/2440337/warning-control-reache… nction-iphone
crsibПостоялецwww8 авг. 201214:43#3
Ну это как бы завсит от компилятора и его настроек. У XCode много недостатков, но не понятно почему отсутсвие ворнинга от внешнего компилятора - проблема XCode
TioRioПостоялецwww8 авг. 201214:52#4
Бред это попробовал, выдает предупреждение что нет возврата значения
SergioУдалёнwww8 авг. 201215:21#5
crsib
> внешнего компилятора
Apple LLVM - разве это можно назвать внешним компилятором? Формально он, конечно, внешний, но поставляется вместе с Xcode.

TioRio
> Бред это попробовал, выдает предупреждение что нет возврата значения
Возможно, дефолтные настройки разные для iOS и OS X проектов.

crsibПостоялецwww8 авг. 201215:26#6
Sergio
> Apple LLVM - разве это можно назвать внешним компилятором? Формально он,
> конечно, внешний, но поставляется вместе с Xcode.
Clang/LLVM делаются open source сообществом и зародился в иллинойском университете. Apple, как, например, и Google - просто спонсоры. Так что да - это внешний компилятор
PushkoffУдалёнwww8 авг. 201215:34#7
увеличь warning level. или включи генерацию подобных варнингов, насколько я помню это последняя секция в меню настройки компилятора. там много чего отключено, просто включи
SergioУдалёнwww8 авг. 201215:44#8
Pushkoff
> просто включи
Ну да, я же в первом посте написал как это решить.
СтасПостоялецwww9 авг. 201215:27#9
Добавлю тоже. В какой то момент в XCode оставили только компилятор LLVM 3.0. Как выяснилось этому компилятору очень не нравится такой код:
class cVector3du
{
public:
    union
    {
        struct
        {
            float x;
            float y;
            float z;
        };
        float v[3];
    };
};

struct sAxes
{
    cVector3du  m_right;
    float       m_w1;
    cVector3du  m_up;
    float       m_w2;
    cVector3du  m_forward;
    float       m_w3;
};

class cMatrix4x4
{
    union
    {
        struct
        {
            sAxes       axes;
            cVector3du  m_origin;
            float       m_w4;
        };
        struct
        {
            float _11, _12, _13, _14;
            float _21, _22, _23, _24;
            float _31, _32, _33, _34;
            float _41, _42, _43, _44;
        };
        float m[4][4];
        float f[16];
    };
    
    static cMatrix4x4 Identity;
    
    cMatrix4x4(){};
    cMatrix4x4( float m11, float m12, float m13, float m14,
                float m21, float m22, float m23, float m24,
                float m31, float m32, float m33, float m34,
                float m41, float m42, float m43, float m44 ):
                _11(m11), _12(m12), _13(m13), _14(m14),
                _21(m21), _22(m22), _23(m23), _24(m24),
                _31(m31), _32(m32), _33(m33), _34(m34),
                _41(m41), _42(m42), _43(m43), _44(m44) {}
    cMatrix4x4( const cVector3du & origin )
    {
    }
};

cMatrix4x4 cMatrix4x4::Identity( 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1 );

Компилер крашится на компиляции такого кода. (Счастливым обладателям LLVM > 3.0 версии можно уже не беспокоится)

gammakerПостоялецwww9 авг. 201216:40#10
>Как выяснилось этому компилятору очень не нравится такой код
Мне тоже.
SergioУдалёнwww10 авг. 201218:29#11
Крушите его полностью!
#include <iostream>

template <int aValue>
struct Factorial { static const int Value = aValue * Factorial<aValue-1>::Value; };

template <> struct Factorial<1> { static const int Value = 1; };

int main(int argc, char **argv)
{
  std::cout << "Factorial 900 = " << Factorial<900>::Value << std::endl;
  return 0;
}

Даже при попытке открыть проект с этим файлом.

ReeVУдалёнwww10 авг. 201221:40#12
LLVM 3.0. - очень не дружит с anonymous structs

/ Форум / iPhone: Создание игр / Общее

Тема в архиве.

2001—2018 © GameDev.ru — Разработка игр