タグ

gccと配列に関するiwwのブックマーク (6)

  • サイズが0の構造体は作れない? - Qiita

    前書き この記事は、2023Unityアドカレの12/23の記事です。 今年は、完走賞に挑戦してみたいと思います。Qiita君ぬい欲しい! はじめに C#は「マネージド」というだけあって、普段はメモリ上でのふるまいなどはあまり意識しなくて済むようになっています。しかし、もう一つの顔があり、unsafeコンテキストや、Marshal、Unsafeクラスなど、ローレベルまでプログラマが制御できる仕組みも備わっております。 StructLayoutで構造体サイズを指定 構造体がメモリ上でどのようなレイアウトをとるかについては、普段は意識せずともコンパイラやランタイム(JIT)が良しなにしてくれます。しかし、[StructLayout]属性を使うことでこれを指定することもできます。 例えばこのようにすると、フィールドはbyteが1つだけ、賞味1byteしかないですが、512byteとしてあつかう

    サイズが0の構造体は作れない? - Qiita
    iww
    iww 2024/10/07
    フレキシブル構造体
  • DCL38-C. フレキシブル配列メンバには正しい構文を使用する

    DCL38-C. フレキシブル配列メンバには正しい構文を使用する フレキシブル配列メンバ(flexible array member)とは、2 つ以上の名前付きメンバをもつ構造体の最後のメンバが不完全配列型、つまり、構造体の中で配列のサイズが明確に指定されていない、特殊な型になっている配列を指す。struct hack と呼ばれるこの手法は広く使われており、さまざまなコンパイラが対応している。それゆえ、フレキシブル配列メンバの宣言にはさまざまな構文が使用されてきた。C 標準に適合した実装では、C 標準によって有効であると保証されている構文を使用すること。 フレキシブル配列メンバは、C 標準のセクション 6.7.2.1 パラグラフ 18 において次のように定義されている[ISO/IEC 9899:2011]。 特別な場合として、2 つ以上の名前付きメンバをもつ構造体の最後のメンバは、不完全配

    DCL38-C. フレキシブル配列メンバには正しい構文を使用する
    iww
    iww 2024/10/07
    フレキシブル構造体
  • zero length array, flexible array - Shohei Yoshida's Diary

    github.com たまたま目に入ったこのコードを見ていて, zero length arrayって末尾のメンバ以外でも使えたんだって思って気になるところを調べてみた. Flexible array en.wikipedia.org C99から入った機能. 配列の長さを宣言しないことで利用できる. sizeofはできない. 構造体などの末尾フィールドに置くことができる. 典型的な使い方は以下のような感じ. struct Data { // some fields SomeData s[]; }; struct Data *d = malloc(sizeof(Data) + some_arbitrary_size); ポインタを使ってしまうと構造体とこの末尾のデータがある場所は別の領域になってしまうわけだが, このようにすることで連続するメモリにすべて割り当てることができる. 構造体の末尾

    zero length array, flexible array - Shohei Yoshida's Diary
    iww
    iww 2024/10/07
    フレキシブル構造体
  • C言語で並列処理(OpenMP) - 余白の書きなぐり

    Windows(minGW), Mac, Linux のgcc(version 4.2以降)で動作確認済。 新しいライブラリ等をインストールすることなく、デフォルトのままのgccでコンパイルが通った。 こんなに手軽に並列計算できるなんてすごい。 ソースコード // hoge.c // 並列処理のプログラム // Windows, Mac, Linux の全ての gcc (4.2以降) でプログラム動作確認済 #include <stdio.h> #include <omp.h> int main(int argc, char const* argv[]) { int n; n = omp_get_max_threads(); // デフォルドのスレッド数を取得 printf("max threads (default): %d\n",n); omp_set_num_threads(16)

    C言語で並列処理(OpenMP) - 余白の書きなぐり
  • GCC some extensions

    gcc(Gnu C Compiler)の拡張文法 [警告!] C/C++言語初心者はこのページを読まないでください。 このページではgcc独自のC/C++拡張文法について解説します。 これらの拡張文法が可能にする機構は確かに便利なのですが、 もちろんANSI規格に従っていないので、一般的には使うべきではありません。 C/C++言語文法を学び始めている初心者はこれらgcc拡張文法を 知るべきではありません。C/C++言語を正しく理解する上で大きな 支障となります。 C/C++言語を十分に熟知した者は、gccがこのようなこともすることを 「雑談」として知っておくと楽しいかもしれません。もちろん 実戦に使うべきではありませんが。しかし初心者が偶然に、これらの 機能を使ってうまくいく場合がありますので、そのような初心者を 見つけたら、それが標準規格ではないことを注意してください。 配列変数をコピー

    iww
    iww 2014/10/24
    知らなかったことのオンパレードだ・・・ 1995年の記事なのに
  • ある gcc の warning の直し方

    iww
    iww 2010/09/20
    discards qualifiers from pointer target type
  • 1