2012-01-23 17 views
4

私はiPhone開発に慣れていないので、単純な描画ルーチンを試しているだけで、簡単な数学で定義された値を使うのに問題があります。目的c:数値式で#define定数値を使用する

私はこのような行があります。

int offset = (((myValue - min_value) * 6) - middle); 

をし、これが正常に動作します - しかし、私はそれを多くの場所を使用しますので、私はハードを使用してのように(そこに6をコード化されていない

だから私は、私はに#defineを使用して定数を定義しようと思いました:

#define WIDTH_OFFSET 6; 

、私は使用することができます

int offset = (((myValue - min_value) * WIDTH_OFFSET) - middle); 

しかし - これはコンパイラエラーを取得します「期待表現を」

私はいくつかの行に計算を分割することで、このラウンドを取得することができます:

int offset = myValue - min_value; 
offset = offset * WIDTH_OFFSET; 
offset = offset - middle; 

コンパイラが、これは結構ですと考えています。

私はここに暗黙のキャストや他の言語機能があると思っています。何が起こっているのか誰にでも説明できますか?

答えて

14

#define後にセミコロン;を削除:前処理した後、あなたの表現が

(((myValue - min_value) * 6;) - middle); 

あなたが見ることができるように、の真ん中にセミコロンがあるになるように

#define WIDTH_OFFSET 6 

#defineは、文字通りその引数を代入し式は構文エラーです。

offset = offset * 6;; 

のように行の2つのセミコロンを持つことは構文的に有効であるため、一方で、あなたの他の表現

int offset = myValue - min_value; 
offset = offset * WIDTH_OFFSET; 

は、このような問題を示しません。

+0

私Ninja'dその編集で:D – Diziet

+0

:)ありがとう!それはたくさんの意味があります - 新人のエラーの1つ) もう一つの考え方 - これはあなたがコードの任意のライン(ある種のスニペットセクションのようなもの)で '#define'を使うことを意味しますか?それはかなり楽しいことができます:) –

+0

はい - あなたはどこでもかなり何でもそれを使用することができます。 #defineをマクロとみなして、あなたの心が望むものを入力してください。それは非常に強力で、あなたは条件付きでそれを使うことができます。それは、その力を倍増させるようなものです。 –

2

dasblinkenlightが述べたように、セミコロンは削除してください。これについての説明は、#definesはコードへのリテラル置換であるということです。このようにセミコロンを使用して壊れたコードが読み:

int offset = (((myValue - min_value) * 6;) - middle); 

作業コードを読み取る:;;として文法的に大丈夫です

offset = offset * 6;; 

効果的に空白のコード行です。

+0

そして、中間期間dasblinkenlightが投稿を編集します。 :D – Diziet

+0

:)明確にしてくれてありがとう - たとえdasblinkenlight snuckであっても素早く;) –

+0

明らかに私はより速く入力する方法を学ぶ必要があります。 :Dあなたの投票のための熾烈な競争! –

4

何かをどこに定義するかは、正確にはです。そこに自分で入力したのと同じです。あなたがWIDTH_OFFSETを使用しているところで、あなたは6を得ています。それはあなたの意図ではありません。セミコロンを削除するだけです。

2

基本的に、マクロはプリプロセッサによってインラインに配置される便利な関数です。あなたが一致するエントリのためにコピー/ペーストをしていると考えることができます。あなたのケースでは、WIDTH_OFFSETの任意の出現を6;に置き換えるので、他の人のようにセミコロン;を削除してください。 (添加前の意図しない部分乗算のような)それ以外の場合は、ブラケット()でそれらを置くために、思い出してくれるの簡単な数学関数用のマクロを定義する際にも、あなたには、いくつかの数学演算順序のバグで終わる可能性

関連する問題