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

Cは、システムプログラミング(OSおよび組み込み)、ライブラリ、ゲーム、クロスプラットフォームに使用される汎用プログラミング言語です。このタグは、ISO 9899標準で定義されているC言語に関する一般的な質問で使用する必要があります(特に指定のない限り、最新バージョン9899:2018。バージョン固有のリクエストには、c89、c99、c11などのタグも付けます)。CはC ++とは異なり、合理的な理由がない限り、C ++タグと組み合わせるべきではありません。

4
2つの整数をどのように比較する必要がありますか?
私は最近、配列をソートするプログラムを書きました。そのために、私はそれに渡す比較関数を書く必要がありました。私の比較関数は1(if x> y)、-1(if x <y)、または0(if x = y)を返しているはずです。条件式を使用して通常の関数(関数1)を記述しましたが、別の方法(関数2)で記述するようにアドバイスされました。そのように書く方が良いですか?ブール条件は常に真実に対して1を返しますか?(つまり、x = 0およびy = 0の場合、常に(x == y)== 1になりますか?) 機能1: int Icmp(void* x, void* y) { int a = *(int*)x; int b = *(int*)y; if (a > b) return 1; else if (a < b) return -1; else return 0; } 機能2: int Icmp(void* …
8 c 

3
標準Cでは `(i)= 1`は違法ですか?
私はこの標準に従っているCコンパイラを書いており、次のようなステートメントを解析した場合: int i; (i) = 1; 私のコンパイラ(i)は、それが右辺値であり、割り当て可能であってはならないことを指摘するエラーを報告します。 コードとルールを確認したところ、次のことがわかりました:代入式のセマンティクス: 代入演算子は、左オペランドとして変更可能な左辺値を持つものとします。 割り当て式は、割り当て後に左のオペランドの値を持っていますが、左辺値ではありません。 私の場合は、2つの代入式があります (i) = 1し、i括弧インチ したがって、これは(i)右辺値である必要があります。 だから私の質問です:(i) = 1このC標準では 違法ですか?

2
Cマクロの標準準拠
私はここにこの小さな宝石を持っています(C-FAQからシャムレスに盗まれたアイデア): /* A lot of checks omitted to get rid of the architectures with a "weird" endianness */ /*...*/ #define MP_ENDIANESS ( (0x41424344ul == *(uint32_t*)"ABCD") ? MP_BIG_ENDIAN : MP_LITTLE_ENDIAN ) それは新しい現在の標準(この質問が尋ねられたときのC-18)に準拠しているか(未定義の動作ではありません)、準拠している場合は、古いバージョンのどれもそれをサポートしていますか? また、標準に準拠したC ++ですか?(はい、知っていますstd::endian)
8 c++  c 
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.