Будьте внимательны при написании программ в 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; }
В лучшем случае вы получите предупреждение о том, что в конце файла нет новой строки.
А у парня противоположные проблеммы:
http://stackoverflow.com/questions/2440337/warning-control-reache… nction-iphone
Ну это как бы завсит от компилятора и его настроек. У XCode много недостатков, но не понятно почему отсутсвие ворнинга от внешнего компилятора - проблема XCode
Бред это попробовал, выдает предупреждение что нет возврата значения
crsib
> внешнего компилятора
Apple LLVM - разве это можно назвать внешним компилятором? Формально он, конечно, внешний, но поставляется вместе с Xcode.
TioRio
> Бред это попробовал, выдает предупреждение что нет возврата значения
Возможно, дефолтные настройки разные для iOS и OS X проектов.
Sergio
> Apple LLVM - разве это можно назвать внешним компилятором? Формально он,
> конечно, внешний, но поставляется вместе с Xcode.
Clang/LLVM делаются open source сообществом и зародился в иллинойском университете. Apple, как, например, и Google - просто спонсоры. Так что да - это внешний компилятор
увеличь warning level. или включи генерацию подобных варнингов, насколько я помню это последняя секция в меню настройки компилятора. там много чего отключено, просто включи
Pushkoff
> просто включи
Ну да, я же в первом посте написал как это решить.
Добавлю тоже. В какой то момент в 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 версии можно уже не беспокоится)
>Как выяснилось этому компилятору очень не нравится такой код
Мне тоже.
Крушите его полностью!
#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; }
Даже при попытке открыть проект с этим файлом.
LLVM 3.0. - очень не дружит с anonymous structs
Тема в архиве.