配列の初期化における三項演算子

user259819

定数が有効なC99を使用して、配列の初期化内でテナリー演算子を使用していますか?

uint8_t foo[] = {bar? 9U:20U};
StoryTeller-Unslander Monica

はい、どうぞ。イニシャライザーの文法作成から開始します。

6.7.8初期化

initializer:
       assignment-expression
       { initializer-list }
       { initializer-list , }
initializer-list:
       designation(optional) initializer
       initializer-list , designation(optional) initializer

そのセクションのイニシャライザに関連する(私の意見では)唯一の制約は、静的ストレージ期間を持つオブジェクトの定数式でなければならないということです。

静的ストレージ期間を持つオブジェクトの初期化子のすべての式は、定数式または文字列リテラルでなければなりません。

の生産に続いてassignment-expression、私たちはそれを見る

6.5.16代入演算子

assignment-expression:
        conditional-expression
        unary-expression assignment-operator assignment-expression

条件式も有効な代入式です。そのため、初期化子リストに初期化子として表示される場合があります。チェックする必要があるのは、静的ストレージ期間を持つオブジェクトの有効な定数式である可能性があることだけです。

6.6定数式

constant-expression:
         conditional-expression

次の制約とセマンティック段落を使用します。

定数式には、評価されない部分式に含まれている場合を除き、代入、インクリメント、デクリメント、関数呼び出し、またはコンマ演算子を含めないでください。

イニシャライザの定数式には、より広い範囲が許可されます。このような定数式は、次のいずれかであるか、評価されます。

  • 算術定数式、
  • ヌルポインタ定数、
  • アドレス定数、または
  • オブジェクトタイプのアドレス定数プラスまたはマイナス整数定数式。

したがって、上記のすべてが次の有効なプログラムになります。

#include <stdint.h>
#include <stdlib.h>

#define BAR 1

uint8_t foo[] = {BAR ? 9U:20U};

int main(void) {
   int bar = rand();
   uint8_t foo[] = {bar ? 9U:20U};
}

さらに、自動保存期間のあるオブジェクトの場合、条件式の2つのサブ式として、定数式に制限されません。スコープ内の任意のオブジェクトを参照することもできます。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

静的配列の初期化内の三項演算子が期待どおりに機能しない

分類Dev

三項演算子を使用して配列を初期化する

分類Dev

三項演算子による配列の初期化が違法なのはなぜですか?

分類Dev

三項演算子による構造の初期化

分類Dev

三項演算子による配列の分解

分類Dev

ポインタの初期化における単項プラス演算子の使用は何ですか?

分類Dev

再帰における三項演算子の奇妙な振る舞い

分類Dev

<JDK8との互換性におけるJavaの三項演算子とif / else

分類Dev

Pythonの配列の三項演算子

分類Dev

Swiftでの初期化のための三項演算子

分類Dev

スウィフトで三項演算子を使用して配列の最小値を見つける方法

分類Dev

配列の初期化におけるPythonの奇妙な動作

分類Dev

swift の配列初期化における () と [] の違い

分類Dev

配列内のグリッド色を特定の色にするための三項演算子(複数の条件)Java

分類Dev

代入演算子の左側にある三項条件演算子

分類Dev

三項演算子を使用して配列内の値を確認する

分類Dev

配列インデックスを選択するための三項演算子

分類Dev

C#で三項演算子を使用して配列の内容を表示する

分類Dev

三項演算子を最適化する

分類Dev

三項演算子でのラムダのキャプチャの初期化

分類Dev

三項演算子の明確化

分類Dev

+演算子javaによる文字列の初期化

分類Dev

文字列を三項演算子に変換

分類Dev

反応における三項演算子を使用した条件付きレンダリング

分類Dev

Kotlin配列の初期化におけるinit呼び出しの順序

分類Dev

DOT演算子を使用して構造体型の配列を初期化する方法

分類Dev

三項演算子に相当するKotlin

分類Dev

要素を配列にプッシュするときに三項演算子を使用する方法

分類Dev

Rの三項演算子に相当

Related 関連記事

  1. 1

    静的配列の初期化内の三項演算子が期待どおりに機能しない

  2. 2

    三項演算子を使用して配列を初期化する

  3. 3

    三項演算子による配列の初期化が違法なのはなぜですか?

  4. 4

    三項演算子による構造の初期化

  5. 5

    三項演算子による配列の分解

  6. 6

    ポインタの初期化における単項プラス演算子の使用は何ですか?

  7. 7

    再帰における三項演算子の奇妙な振る舞い

  8. 8

    <JDK8との互換性におけるJavaの三項演算子とif / else

  9. 9

    Pythonの配列の三項演算子

  10. 10

    Swiftでの初期化のための三項演算子

  11. 11

    スウィフトで三項演算子を使用して配列の最小値を見つける方法

  12. 12

    配列の初期化におけるPythonの奇妙な動作

  13. 13

    swift の配列初期化における () と [] の違い

  14. 14

    配列内のグリッド色を特定の色にするための三項演算子(複数の条件)Java

  15. 15

    代入演算子の左側にある三項条件演算子

  16. 16

    三項演算子を使用して配列内の値を確認する

  17. 17

    配列インデックスを選択するための三項演算子

  18. 18

    C#で三項演算子を使用して配列の内容を表示する

  19. 19

    三項演算子を最適化する

  20. 20

    三項演算子でのラムダのキャプチャの初期化

  21. 21

    三項演算子の明確化

  22. 22

    +演算子javaによる文字列の初期化

  23. 23

    文字列を三項演算子に変換

  24. 24

    反応における三項演算子を使用した条件付きレンダリング

  25. 25

    Kotlin配列の初期化におけるinit呼び出しの順序

  26. 26

    DOT演算子を使用して構造体型の配列を初期化する方法

  27. 27

    三項演算子に相当するKotlin

  28. 28

    要素を配列にプッシュするときに三項演算子を使用する方法

  29. 29

    Rの三項演算子に相当

ホットタグ

アーカイブ