問題タブ [c11]

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.

0 投票する
2 に答える
8552 参照

visual-c++ - std :: isfinite on MSVC

C ++ 11およびC11標準は、 std::isfinite 関数を定義します。cmathVisual Studio 2012は、またはの一部としてそれを提供してい ないようですが、 math.hこの機能を提供しているようです。amp_math.h

isfinite互換性がありstd::isfiniteますか?ドキュメントには、で呼び出されたときの動作については説明されておらず、NAN これをテストするためのVSコンパイラがありません。

0 投票する
3 に答える
7413 参照

c - 構造体の途中にある可変長配列-このCコードがgccに有効である理由

gcc 4.6によって有効なC(C99、C11)として扱われるVLA(可変長配列)を使用する奇妙なコードがいくつかあります。

このコードは警告なしにコンパイルされました:

同じ-std=c1x

ただし、これはIntelCコンパイラまたはClang+LLVMでは機能しません。

それで:

  1. これがGCCによって有効であると見なされるのはなぜですか?
  2. GCCの拡張である場合、どこに記述されていますか?
  3. C99およびC11ISO規格で有効ですか?
0 投票する
6 に答える
56570 参照

c - 現在の GCC (特に Ubuntu) のデフォルトの C -std 標準バージョンは何ですか?

cc の現在のバージョンを表示するように依頼すると、これが表示されます。

私が知りたいのは、c89、c90、c99、または c11 のどれが使用されているかです。

0 投票する
1 に答える
546 参照

c - C99 fesetround()/fegetround() の状態はスレッドごとですか、それともプロセスごとですか?

私がオンラインで見つけた C および POSIX のリファレンスでは、C99 の fesetround() のスレッドセーフ性が指定されていません。GNU のドキュメントでさえそうではありません[1]。状態はスレッドごとですか、それともプロセスごとですか?

[1] https://www.gnu.org/software/hello/manual/libc.html#Rounding

0 投票する
2 に答える
1834 参照

c - Cの整数型

完全に移植可能で、特定のアーキテクチャに縛られないようにしたいCプログラム(C99またはC2011)を作成したいとします。

次に、古い整数型( int、、)とその仲間から完全に切り離し、、などのみを使用したいと思うようです(おそらく、とバージョンも使用します)。longshort int8_tuint8_tint32_tleastfast

それでは、リターンタイプはmain何ですか?それとも私たちは攻撃しなければなりませんintか?規格ではそうする必要がありますintか?

GCC-4.2で書くことができます

でも使えない、uint32_tそれでもint8_t

これは間違いなくtypedefによるものです。リターンタイプをターゲットアーキテクチャに任せない限り、実際には移植性がないため、これは不特定のサイズタイプを使用しなければならないという1つのケースのようです。この解釈は正しいですか?コードベースに「たった1つ」の古いものがあるのは奇妙に思えintますが、実用的であることを嬉しく思います。

0 投票する
1 に答える
220 参照

c - Xcode 4.6にC11サポートを追加することは可能ですか?

Xcode4.6でC11のサポートを可能にするプラグインがあるかどうか疑問に思っています。

0 投票する
1 に答える
3726 参照

c - _clangとC11を使用する構造体メンバーのAlignas

C11と構造体を使用した-Wpaddedで問題が発生しています。

_Alignasを使用したStructureメンバーの配置についてはすでに読みましたが、clangのドキュメントを調べたところ、現在サポートされていることがわかりました。

また、最近トランクから作成した非常に新しいバージョンのclangを使用しています。

私が遭遇している問題はこれです:

これは私にこの警告を投げます:

さて、これは何_Alignasのためですか?次のように、intメンバー宣言の前に配置してみました。

しかし、同じ警告が残っています。また、_Alignasをさまざまな場所に配置してみましたが、役に立ちませんでした。ここで何が欠けていますか?

この特定の警告を無視することができ、パディングが重要である理由を理解しているので、パディングとは何かについての回避策や説明には興味がありません。警告が出ないように、Cをポータブルで標準に準拠した方法で変更する方法を知りたいです。

0 投票する
3 に答える
10330 参照

c++ - Windows上のC11スレッド

Windows上のVisualStudio2012Expressでクロスプラットフォームソフトウェアを作成しています。明らかな理由で、.NETを使用できませんSystem::Threading::Thread。.NETフォームに基づく抽象フレームワークを作成したので、VS2012を使用しながら、 C11の新しいスレッド機能(threads.hではなく)を使用できることを望んでいました。pthread.h私はそれがWindowsにとって不可能であると信じ始めています。誰かがアイデアを持っていますか。C ++ライブラリ(boostとstd)が私の唯一のオプションである場合にのみ、それらを使用します。

何をすべきか知っている人はいますか?

0 投票する
2 に答える
5960 参照

c - gets_s への未定義の参照?

次のコマンドを使用して、Ubuntu 4.6.1 および SUSE 4.6.2 で gcc を使用しています。

私のソースコードは

私の質問について詳しく説明します。

私にとっての主な問題は、入力された行と保存された行の間の 1 対 1 の対応です。

成功した場合、fgets と gets_s の違いは、fgets には改行ターミネータが含まれているのに対し、gets_s は改行ターミネータを null ターミネータに置き換えて、行入力と gets_s への成功した呼び出しとの間の 1 対 1 の対応を維持することです。

バッファー長をオーバーフローする入力の場合、fgets はバッファーに収まる数の文字を受け入れ、残りを次の fgets のために入力バッファーに残します。

標準 (K.3.5.4.1) では、(gets とは異なり) gets_s を使用する場合、改行、EOF、または n-1 文字以内の読み取りエラーが必要であると規定されています。したがって、オーバーフローは実行時制約違反です。実行時制約違反がある場合、バッファ内の最初の文字がヌル文字に設定され、stdin 入力バッファ内の文字が読み取られ、改行文字が読み取られるまで破棄されます。ファイルの終わりが発生します。または読み取りエラーが発生します。

したがって、成功した場合、私は次のことを期待しました。

オーバーフローでは、fgets と gets_s とは異なる動作を期待していました。言い換えると、

gets_s が入力の最初の行の内容を完全に削除することを期待していたことに注意してください。

主な問題が入力行と保存行の間の 1 対 1 の対応である場合、これはデバッグにおいて重要ですが、独自の関数を記述する必要があります (K&R の getline と同様)。

このような関数では、1 対 1 の対応が維持され、バッファが飽和し​​、実行時制約違反は発生しません。

この結論を導き出すことは正しいでしょうか。

0 投票する
1 に答える
3211 参照

c - C11 _Atomic 変数を初期化して使用する方法は?

次のコードは使用できますか?

C11 仕様 (n1570) は 6.3.2.1p2 で次のように述べています。

左辺値がアトミック型の場合、値は左辺値の型の非アトミック バージョンを持ちます。

だから、これは大丈夫だと言っているようです。