問題タブ [c17]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - C17またはC18と呼ぶべきですか?
ISO 9899:2018 は、 ISOからしばらく前から入手可能です。変更のリスト:
C17 とは何ですか? また、この言語にはどのような変更が加えられましたか?
ISO ドキュメントは 9899:2018 になりますが、非公式にはこのバージョンの規格はしばらくの間 C17 と呼ばれていました。C17とC18のどちらにしようか迷っています。
意見に基づく回答をかき立てないようにするために、私の質問は次のとおりです。この標準を「C17」または「C18」とラベル付けしている正規の情報源は何ですか?
もちろん、最も標準的な情報源は ISO 規格そのものです。そのため、一貫性を保つために、標準を C18 と呼ぶ必要があります。
- C90 = 9899:1990
- C99 = 9899:1999
- C11 = 9899:2011
- C1x = 9899:2018
2017年ではなく2018年にリリースされたので、C18と呼ぶべきだと思いますか?
別の例として、これ-std=c17
によると、 gcc がコンパイラ スイッチを作成したことを知っています。gcc のマニュアルはやや標準的です。彼らはその名前を維持するつもりですか?clang や icc のような他のものはどうですか?
コンセンサスはありますか?委員会からの意見?
c - Windows メモリのフォーマットの問題
この動的な再割り当てをポータブルな方法で機能させようとしています。
私のプログラムは、ユーザーからのテキスト行を受け取り、それをバッファーに追加します。バッファー内のテキストの長さが 20 以上の場合、最初の 20 文字を削除し、それ以降のすべての文字をバッファーの先頭に移動します。
Linux では問題なく動作するこのコードがありますが、Windows で実行するとガベージが発生します。mallocのみを使用してこれをポータブルにする理由/方法を知っている人はいますか? IE は string.h(strcpy) str を使用していません... len 以外のもの。
c17 のみ - 壊れたスタックはありません (ポータブルではありません)。これが私のコードです。エラーなしで gcc 7.3、mingw 7.3 をコンパイルします。get と put をより安全な関数に置き換えましたが、それでもウィンドウにガベージが表示されます。これはフォーマットの問題だと思います...
c - 移植可能な方法で、構造体のメンバーを指すポインターから構造体の先頭へのポインターを計算するにはどうすればよいですか?
T1
とT2
が 2 つの型であり、次の構造体が与えられていると仮定します。
さらに、 type のオブジェクトがあるとしますstruct s
:
これから、オブジェクトの 2 番目の構造体メンバーへのポインターを計算できます。
私が探しているのは、 objectを指すような型q
のポインターから計算するポータブルな方法です。p
struct s *
p
a
c - ネイティブ C の std::lock_guard に似たものはありますか?
C++ では、lock_guard を使用することをお勧めします。これにより、オブジェクトが破棄されたときにミューテックスのロックが解除されることが保証されます。
Cで同じことを実装する方法はありますか? それとも、手動で実装する必要がありますか:
ロックミューテックス
グローバル変数で何かをする
ミューテックスのロックを解除