問題タブ [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.
visual-c++ - std :: isfinite on MSVC
C ++ 11およびC11標準は、
std::isfinite
関数を定義します。cmath
Visual Studio 2012は、またはの一部としてそれを提供してい
ないようですが、
math.h
この機能を提供しているようです。amp_math.h
とisfinite
互換性がありstd::isfinite
ますか?ドキュメントには、で呼び出されたときの動作については説明されておらず、NAN
これをテストするためのVSコンパイラがありません。
c - 構造体の途中にある可変長配列-このCコードがgccに有効である理由
gcc 4.6によって有効なC(C99、C11)として扱われるVLA(可変長配列)を使用する奇妙なコードがいくつかあります。
このコードは警告なしにコンパイルされました:
同じ-std=c1x
:
ただし、これはIntelCコンパイラまたはClang+LLVMでは機能しません。
それで:
- これがGCCによって有効であると見なされるのはなぜですか?
- GCCの拡張である場合、どこに記述されていますか?
- C99およびC11ISO規格で有効ですか?
c - 現在の GCC (特に Ubuntu) のデフォルトの C -std 標準バージョンは何ですか?
cc の現在のバージョンを表示するように依頼すると、これが表示されます。
私が知りたいのは、c89、c90、c99、または c11 のどれが使用されているかです。
c - C99 fesetround()/fegetround() の状態はスレッドごとですか、それともプロセスごとですか?
私がオンラインで見つけた C および POSIX のリファレンスでは、C99 の fesetround() のスレッドセーフ性が指定されていません。GNU のドキュメントでさえそうではありません[1]。状態はスレッドごとですか、それともプロセスごとですか?
[1] https://www.gnu.org/software/hello/manual/libc.html#Rounding
c - Cの整数型
完全に移植可能で、特定のアーキテクチャに縛られないようにしたいCプログラム(C99またはC2011)を作成したいとします。
次に、古い整数型( int
、、)とその仲間から完全に切り離し、、などのみを使用したいと思うようです(おそらく、とバージョンも使用します)。long
short
int8_t
uint8_t
int32_t
least
fast
それでは、リターンタイプはmain
何ですか?それとも私たちは攻撃しなければなりませんint
か?規格ではそうする必要がありますint
か?
GCC-4.2で書くことができます
でも使えない、uint32_t
それでもint8_t
これは間違いなくtypedefによるものです。リターンタイプをターゲットアーキテクチャに任せない限り、実際には移植性がないため、これは不特定のサイズタイプを使用しなければならないという1つのケースのようです。この解釈は正しいですか?コードベースに「たった1つ」の古いものがあるのは奇妙に思えint
ますが、実用的であることを嬉しく思います。
c - Xcode 4.6にC11サポートを追加することは可能ですか?
Xcode4.6でC11のサポートを可能にするプラグインがあるかどうか疑問に思っています。
c - _clangとC11を使用する構造体メンバーのAlignas
C11と構造体を使用した-Wpaddedで問題が発生しています。
_Alignasを使用したStructureメンバーの配置についてはすでに読みましたが、clangのドキュメントを調べたところ、現在サポートされていることがわかりました。
また、最近トランクから作成した非常に新しいバージョンのclangを使用しています。
私が遭遇している問題はこれです:
これは私にこの警告を投げます:
さて、これは何_Alignas
のためですか?次のように、intメンバー宣言の前に配置してみました。
しかし、同じ警告が残っています。また、_Alignasをさまざまな場所に配置してみましたが、役に立ちませんでした。ここで何が欠けていますか?
この特定の警告を無視することができ、パディングが重要である理由を理解しているので、パディングとは何かについての回避策や説明には興味がありません。警告が出ないように、Cをポータブルで標準に準拠した方法で変更する方法を知りたいです。
c++ - Windows上のC11スレッド
Windows上のVisualStudio2012Expressでクロスプラットフォームソフトウェアを作成しています。明らかな理由で、.NETを使用できませんSystem::Threading::Thread
。.NETフォームに基づく抽象フレームワークを作成したので、VS2012を使用しながら、 C11の新しいスレッド機能(threads.h
ではなく)を使用できることを望んでいました。pthread.h
私はそれがWindowsにとって不可能であると信じ始めています。誰かがアイデアを持っていますか。C ++ライブラリ(boostとstd)が私の唯一のオプションである場合にのみ、それらを使用します。
何をすべきか知っている人はいますか?
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 の対応が維持され、バッファが飽和し、実行時制約違反は発生しません。
この結論を導き出すことは正しいでしょうか。
c - C11 _Atomic 変数を初期化して使用する方法は?
次のコードは使用できますか?
C11 仕様 (n1570) は 6.3.2.1p2 で次のように述べています。
左辺値がアトミック型の場合、値は左辺値の型の非アトミック バージョンを持ちます。
だから、これは大丈夫だと言っているようです。