C and C++


LANG.EXT.GNU : GNU拡張の使用

要旨

以下のGNU拡張を使用しています。

プロパティ

クラス名 GNU Extension
日本語クラス名 GNU拡張の使用
クラス分類 スタイル (style)
ニーモニック LANG.EXT.GNU
カテゴリー
MisraC2023 MisraC2023:1.2 Language extensions should not be used
Misra2012 Misra2012:1.2 Language extensions should not be used
Misra2004 Misra2004:1.1 All code shall conform to ISO/IEC 9899:1990 "Programming languages C", amended and corrected by ISO/IEC 9899/COR1:1995, ISO/IEC 9899/AMD1:1995, and ISO/IEC 9899/COR2:1996
  Misra2004:2.2 Source code shall only use /* ... */ style comments
JPL JPL:1 Do not stray outside the language definition.
対応言語 C および C++ で利用可能です。
有効/無効設定 このワーニングクラスのチェックはデフォルトで無効になっており、プロジェクトには非正規の C向けAST が必要になります。有効にするにはプロジェクト設定ファイル (configuration file) に以下の WARNING_FILTER ルールと RETAIN_UNNORMALIZED_C_AST 設定を追加してください。
RETAIN_UNNORMALIZED_C_AST = Yes
WARNING_FILTER += allow class="GNU Extension"
注:非正規化された AST を継続して使用した場合、使用ディスク容量が増加し解析時間が長くなる可能性があります。

#include <stddef.h>

typedef int myvector __attribute__ ((vector_size (16))); /* 'GNU Extension' warning issued here
                                                          * (vector type) */ 

struct S { int a; int b; };

double EXT_GNU(int a, int b, _Complex double comp){
    int i=3;
    int j,k;
    double d;
    _Complex double c;
    void * l;  

    switch (a){                            
      case 0 ... 3: break;                         /* 'GNU Extension' warning issued here
                                                    * (switch case range) */ 
          /* ... */};

    d = __real comp;                               /* 'GNU Extension' warning issued here
                                                    * (and also for __real__, __imag, __imag__, and ~) */ 
 
    __extension__ i++;                             /* 'GNU Extension' warning issued here
                                                    * (__extension__ keyword) */ 

    i = ({j=i; while (j<100) j+=(int)d; j; });     /* 'GNU Extension' warning issued here
                                                    * (statement expression) */ 

    l = &&label1;                                  /* 'GNU Extension' warning issued here
                                                    * (taking label address) */ 

    goto *l;                                       /* 'GNU Extension' warning issued here
                                                    * (computed goto) */ 
  label1 : i += a;
  label2 : i += b;
                   
    i += __builtin_offsetof(struct S, b);          /* 'GNU Extension' warning issued here
                                                    * (__builtin_offsetof()) */ 

    __builtin_types_compatible_p(int, short);      /* 'GNU Extension' warning issued here
                                                    * (__builtin_types_compatible_p()) */ 

    asm ("mov %1, %0" : "=r" (i) : "r" (j));       /* 'GNU Extension' warning issued here
                                                    * (extended asm) */
    return i;
}

関連のある設定ファイルパラメータ

設定ファイルの以下のパラメータがこのワーニングクラスのチェックに影響します。