Objective-Cの初心者の愚痴です。
Objective-C初心者の私が躓いたところです。
とあるプロジェクトをソースだけ引き継ぎをして自分で展開できるのかを確認していました
ソースしかないというアホみたいな状況ですが現実です。
お金をもらっているのでがんばらないといけないのですがマジでObjective-Cのプリプロセッサが嫌いです。
IFのネスト(入れ子)ができない
例
#ifdef USE_POPU_PMENU [self startPopup]; #else #if (APP_TYPE != APP_TYPE_MAP) [self startLaunch]; #else [self performSegueWithIdentifier:@"secondView" sender:nil]; #endif /* (APP_TYPE != APP_TYPE_MAP) */ #endif /* USE_POPU_PMENU */
クソ言語と呼ばれているvbですらifのネストができます。やり方があるのかもしれないけど見にくいです。 ネストできないところにインデントができるObjective-Cがあるのです。 上の例はまだわかりやすいですがMethodの途中にあるとカオス。
プリプロセッサのDEFINEが嫌い
DEFINEで定義したけど値が入っていないというパターンがあります
#define USE_IMAGE_POST
定義されているけど値が入っていない?? なにか入れてくれよ
さらにややこしいのがプリプロセッサで使えるように ターゲットの単位でもつことができます
例えば、以下のような形でpchがあります
#import "CommonDefine.h" #ifndef ProjectX_pch #define ProjectX_pch #ifdef DS #import "CommonDefine_DS.h" #endif #endif /* ProjectX_pch */
この#ifdef DSのDSってどこで設定されているの??
作った人が悪いのですがコメントすら書いていないので??
まじでわからん。しかもDSという短い文字。コメント書いてくれよ!!
色々調べた結果、この値はProjectファイルのターゲットにGCC_PREPROCESSOR_DEFINITIONSがあり そこで設定されています。
GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", DS, );
GUIでは以下です
参考URL
https://qiita.com/edo_m18/items/126fe6561f662b86210e https://www.rk-k.com/archives/6031