2016-11-28 3 views
0

私はそれに接続されているif()文を持っている#ifdefブロック内にカプセル化された関数の中でその機能を持っている:変数othervarのみ#ifdefブロック内で使用されているIF本体の中に変数を宣言するときに欠点はありますか?

int myfunction(void) { 
    int condition = 0; 
#ifdef USE_WHATEVER 
    int othervar = 0; 
#endif /* USE_WHATEVER */ 
    /* some code */ 
#ifdef USE_WHATEVER 
    if(condition) { 
    othervar++; 
    /* do other things with othervar */ 
    } 
#endif /* USE_WHATEVER */ 

。全体#ifdefブロックがif文があるので、私はifブロックothervarの宣言を引くこともできます。これは、最初の例よりも私には非常にクリーン思わ

int myfunction(void) { 
    int condition = 0; 
    /* some code */ 
#ifdef USE_WHATEVER 
    if(condition) { 
    int othervar = 0; 
    othervar++; 
    /* do other things with othervar */ 
    } 
#endif /* USE_WHATEVER */ 

。しかし、そのようなことの欠点(パフォーマンス、...)はありますか?

+0

コンパイラがこれら2つのケースに対して異なるコードを生成した場合、私は驚くでしょう。 – GSerg

答えて

1

c89では、変数はブロックの先頭でのみ宣言できます。いくつかのppl /コーディング標準では、ここで見ているように、関数の先頭にすべての変数宣言が置かれます。ただし、変数はブロックの先頭で宣言することができます。

othervarの範囲を考慮する必要があります。 ifブロック内でのみ使用される場合は、宣言をifブロックの先頭に移動することは安全です。

パフォーマンス上の欠点はありません。コンパイラは、2つのケースでまったく同じコードを生成する可能性は低いです。

+0

予想されましたが、わかりませんでした。あなたの答えをありがとう。 – eckes

0

いいえ、ブロックスコープ内で変数を使用しない限り、欠点はありません。唯一の問題は、この種の定義、つまりコード間の変数の定義が一部の標準では受け入れられないことです。

関連する問題