タグ付けされた質問 「standards」

標準は公式に公開されているか、形式、手順、またはプロトコルについてよく合意されています。それらは、個人または組織が基本的なルールまたは境界を設定することによって共同作業することを可能にします。多くの場合、標準には一連の前提条件または前提条件が付属しているため、共同作業者はこれらの条件または前提条件をグラウンドトゥルースとして扱うことができます。


6
シェルスクリプトからWebブラウザーを起動するクリーンな方法?
bashスクリプトで、ユーザーのWebブラウザーを起動する必要があります。これを行うには多くの方法があるようです: $BROWSER xdg-open gnome-open GNOME www-browser x-www-browser ... これを行うには、ほとんどのプラットフォームで機能する、より標準的な方法がありますか?それとも、次のようなものを使うべきですか? #/usr/bin/env bash if [ -n $BROWSER ]; then $BROWSER 'http://wwww.google.com' elif which xdg-open > /dev/null; then xdg-open 'http://wwww.google.com' elif which gnome-open > /dev/null; then gnome-open 'http://wwww.google.com' # elif bla bla bla... else echo "Could not detect the web browser to use." …

4
符号なし整数減算は動作が定義されていますか?
結果が負になる場合に、同じ型の別の整数から符号なし整数を減算する問題があると信じているように見える誰かからコードを見つけました。したがって、このようなコードは、たまたまほとんどのアーキテクチャで機能しても、正しくありません。 unsigned int To, Tf; To = getcounter(); while (1) { Tf = getcounter(); if ((Tf-To) >= TIME_LIMIT) { break; } } これは、私が見つけたC標準からの漠然とした関連性のある唯一の引用です。 結果の符号なし整数型で表すことができない結果は、結果の型で表すことができる最大値よりも1大きい数を法として減じられるため、符号なしオペランドを伴う計算は決してオーバーフローできません。 右のオペランドが大きい場合、モジュロトランケートされた数値のコンテキストで意味がわかるように操作が調整されることを意味するために、その引用を使用できると思います。 すなわち 0x0000-0x0001 == 0x 1 0000-0x0001 == 0xFFFF 実装に依存する署名されたセマンティクスを使用するのとは対照的に: 0x0000-0x0001 ==(符号なし)(0 + -1)==(0xFFFF、ただし0xFFFEまたは0x8001) どちらの解釈が正しいですか?それはまったく定義されていますか?

12
空の配列のチェック:カウントと空
「PHP配列が空かどうかを確認する方法」に関するこの質問では、この質問について考えていました。 配列が空かどうかを判断するときcountに、代わりに使用すべき理由はありemptyますか? 私の個人的な考えは、2つが空の配列の場合と同等であるかどうかです。空の配列の場合empty、ブールの質問に対してブールの回答が得られるためです。上にリンクされている質問から、それcount($var) == 0が人気のある方法のようです。私には、技術的には正しいが、意味がありません。例Q:$ var、あなたは空ですか?A:7。うーん... count == 0代わりに、または単に個人的な好みの問題を使用する理由はありますか? 削除された回答に対するコメントで他の人が指摘したように、countすべての要素をカウントする必要があるため、大規模な配列のパフォーマンスに影響を与えますemptyが、空でないことがわかるとすぐに停止できます。したがって、この場合に同じ結果が得られても、count非効率的である可能性がある場合、なぜ使用するのcount($var) == 0でしょうか。

1
ドットは正規表現の文字クラス(角括弧)でエスケープする必要がありますか?
.正規表現のドットは、任意の1文字と一致します。正規表現がドットと一致するためには、ドットをエスケープする必要があります。\. 角括弧の内側[]のドットはエスケープする必要がないことが指摘されています。たとえば、式: [.]{3}は...文字列に一致します。 ほんとに?もしそうなら、それはすべての正規表現標準に当てはまりますか?

6
コンパイル時のC文字列の長さの計算。これは本当にconstexprですか?
コンパイル時に文字列リテラルの長さを計算しようとしています。これを行うには、次のコードを使用しています。 #include <cstdio> int constexpr length(const char* str) { return *str ? 1 + length(str + 1) : 0; } int main() { printf("%d %d", length("abcd"), length("abcdefgh")); } すべてが期待どおりに機能し、プログラムは4と8を出力します。clangによって生成されたアセンブリコードは、結果がコンパイル時に計算されることを示しています。 0x100000f5e: leaq 0x35(%rip), %rdi ; "%d %d" 0x100000f65: movl $0x4, %esi 0x100000f6a: movl $0x8, %edx 0x100000f6f: xorl %eax, %eax 0x100000f71: callq …

3
sizeof(char)!= 1、または少なくともCHAR_BIT> 8のマシンはありますか?
OverаэтотвопросестьответынаStack Overflowнарусском:Кто-нибудьвстречалвсвоейпрактикеsizeof(char)!= 1? マシン(またはコンパイラ)はどこにありsizeof(char) != 1ますか? DOES C99標準では、と言っているsizeof(char)標準準拠の実装に正確に1でなければなりませんか?ある場合は、セクション番号と引用を教えてください。 更新: バイト(最小読み取りは4バイト、アラインメント済み)をアドレス指定できないマシン(CPU)があるが、バイトの4秒(uint32_t)のみの場合、このマシンのコンパイラーはsizeof(char)4に定義できますか? sizeof(char)1になりますが、charは32ビット(CHAR_BITマクロ)になります Update2: しかし、sizeof結果はバイトではありません!CHARのサイズです。そしてcharは2バイト、または(多分)7ビットにすることができますか? Update3:わかりました 。すべてのマシンが持っていsizeof(char) == 1ます。しかし、どのマシンにありCHAR_BIT > 8ますか?
93 c  char  standards  sizeof  c99 

9
HTMLタグの非標準属性。良いこと?悪いこと?あなたの考え?
タグの非標準属性に関しては、HTML(またはおそらくXHTMLのみ?)は比較的厳密です。それらが仕様の一部でない場合、コードは非準拠と見なされます。 非標準の属性は、メタデータをJavaScriptに渡すのにかなり役立ちます。たとえば、リンクがポップアップを表示すると想定されている場合は、属性にポップアップの名前を設定できます。 <a href="#null" class="popup" title="See the Popup!" popup_title="Title for My Popup">click me</a> または、ポップアップのタイトルをスパンなどの非表示要素に保存することもできます。 <style> .popup .title { display: none; } </style> <a href="#null" title="See the Popup!" class="popup"> click me <span class="title">Title for My Popup</span> </a> しかし、どちらが好ましい方法であるかについて私は引き裂かれました。最初の方法はより簡潔であり、検索エンジンやスクリーンリーダーをそれほど必要としないと思います。逆に、2番目のオプションを使用すると、大量のデータを簡単に保存できるため、用途が広がります。また、標準に準拠しています。 私はこのコミュニティの考えが何であるかに興味があります。このような状況にどのように対処しますか?最初の方法の単純さは、潜在的な欠点(ある場合)を上回りますか?


3
staticキーワードの廃止…これ以上?
C ++ではstatic、変換ユニット内でキーワードを使用して、シンボル(変数または関数宣言)の可視性に影響を与えることができます。 n3092では、これは非推奨になりました。 付録D.2 [depr.static] 名前空間スコープでオブジェクトを宣言する場合、staticキーワードの使用は非推奨になりました(3.3.6を参照)。 n3225では、これは削除されました。 私は見つけることができる唯一の記事は、やや非公式です。 ただし、Cとの互換性(およびCプログラムをC ++としてコンパイルする機能)のために、非推奨は煩わしいことを強調しています。ただし、CプログラムをC ++として直接コンパイルすることは、すでに苛立たしい経験になる可能性があるため、検討する必要があるかどうかはわかりません。 なぜ変更されたのか誰か知っていますか?
89 c++  static  c++11  standards 

4
「揮発性」の定義はこの揮発性ですか、それともGCCにいくつかの標準的なコンプライアンスの問題がありますか?
(WinAPIのSecureZeroMemoryのように)常にメモリをゼロにし、その後メモリが二度とアクセスされないとコンパイラが考えたとしても、最適化されない関数が必要です。揮発性の完璧な候補のようです。しかし、実際にこれをGCCで動作させるのにいくつか問題があります。関数の例を次に示します。 void volatileZeroMemory(volatile void* ptr, unsigned long long size) { volatile unsigned char* bytePtr = (volatile unsigned char*)ptr; while (size--) { *bytePtr++ = 0; } } 十分に単純です。ただし、GCCを呼び出すと実際に生成されるコードは、コンパイラのバージョンと実際にゼロにしようとしているバイト数によって大きく異なります。https://godbolt.org/g/cMaQm2 GCC4.4.7および4.5.3は揮発性を決して無視しません。 GCC 4.6.4および4.7.3は、配列サイズ1、2、および4の揮発性を無視します。 GCC 4.8.1から4.9.2までは、配列サイズ1および2の揮発性を無視します。 GCC 5.1から5.3までは、配列サイズ1、2、4、8の揮発性を無視します。 GCC 6.1は、どの配列サイズでもそれを無視します(一貫性のためのボーナスポイント)。 私がテストした他のコンパイラー(clang、icc、vc)は、コンパイラーのバージョンと配列サイズを問わず、期待どおりのストアを生成します。したがって、この時点で、これは(かなり古くて深刻な?)GCCコンパイラのバグなのか、それともこれが実際に準拠した動作であると不正確になり、ポータブルを作成することが本質的に不可能になる、標準でのvolatileの定義なのか疑問に思います。 SecureZeroMemory」関数? 編集:いくつかの興味深い観察。 #include <cstddef> #include <cstdint> #include <cstring> #include <atomic> void callMeMaybe(char* buf); …
89 c++  c  gcc  standards 

9
現在、ファビコンをサポートするすべてのブラウザにファビコンを表示するための最良の方法は何ですか?
現在ファビコンをサポートしているすべてのブラウザにファビコンを表示するための現在の最良の方法は何ですか? 以下を含めてください: どの画像形式がどのブラウザでサポートされているか。 さまざまなブラウザのどの場所にどの行が必要か。


1
CHAR_MAXに設定されたchar値は、CHAR_MINにラップアラウンドすることが保証されていますか?
私のコード: #include <stdio.h> #include <limits.h> int main() { char c = CHAR_MAX; c += 1; printf("CHAR_MIN=%d CHAR_MAX=%d c=%d (%c)\n", CHAR_MIN, CHAR_MAX, c, c); } 出力: CHAR_MIN=-128 CHAR_MAX=127 c=-128 () char変数セットをにインクリメントするとCHAR_MAX、に戻りCHAR_MINます。この動作は保証されていますか?それとも、未定義の動作または実装固有の動作になりますか?C99標準はこれについて何と言っていますか? [注:charまたはCにCHAR_MAX(127)より大きい値を指定するとどうなりますか。charc = 129が-127に変換されるのはなぜですか?彼らは範囲外の値に値を増分するのではなく範囲外の値を割り当てることについて話しているので、この質問には触れません。]

1
非常に単純なコードからの「違法なハードウェア命令」
疑わしい主張を調査しながら、私はこの小さなテストプログラムを書きましたnoway.c int proveit() { unsigned int n = 0; while (1) n++; return 0; } int main() { proveit(); return 0; } これをテストすると、私は得ます: $ clang -O noway.c $ ./a.out zsh: illegal hardware instruction ./a.out ワット。 最適化せずにコンパイルすると、期待どおりにハングします。私はアセンブリを見て、すべてのベルとホイッスルがないと、main関数は次のようになります。 _main: ## @main pushq %rbp movq %rsp, %rbp ud2 どこud2が明らかに未定義の動作専用の命令です。前述の「決して戻ることのない機能はUBです」という疑わしい主張が強化されています。まだ信じられないけど。本当に!?あなたは安全にスピンループを書くことができないのですか? だから私は私の質問だと思います: これは何が起こっているのか正しい読みですか? もしそうなら、誰かがそれを検証する公式のリソースを私に示すことができますか? このタイプの最適化を実行したい状況は何ですか? …

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.