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

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


10
CおよびC ++コンパイラーは、強制されないのに関数シグニチャーで配列長を許可するのはなぜですか?
これは私の学習期間中に私が見つけたものです: #include<iostream> using namespace std; int dis(char a[1]) { int length = strlen(a); char c = a[2]; return length; } int main() { char b[4] = "abc"; int c = dis(b); cout << c; return 0; } したがって、変数int dis(char a[1])では、 を使用できるため、[1]は何も実行せず、まったく機能しません。またはのように。配列名はポインタであり、配列を伝達する方法を知っているので、私のパズルはこの部分についてではありません。a[2]int a[]char *a 私が知りたいのは、コンパイラがこの動作を許可する理由です(int a[1])。それとも私が知らない他の意味がありますか?
131 c++  c  arrays 

2
リリースモードでは、コードの動作は期待どおりではありません
次のコードは、デバッグモードとリリースモード(Visual Studio 2008を使用)で異なる結果を生成します。 int _tmain(int argc, _TCHAR* argv[]) { for( int i = 0; i < 17; i++ ) { int result = i * 16; if( result > 255 ) { result = 255; } printf("i:%2d, result = %3d\n", i, result) ; } return 0; } デバッグモードの出力。これは予想どおりです。 i: 0, …

3
制限が959ではなく960であるときに単純なループが最適化されるのはなぜですか?
次の単純なループについて考えてみます。 float f(float x[]) { float p = 1.0; for (int i = 0; i < 959; i++) p += 1; return p; } gcc 7(スナップショット)またはclang(トランク)でコンパイルすると、-march=core-avx2 -Ofast非常によく似たものになります。 .LCPI0_0: .long 1148190720 # float 960 f: # @f vmovss xmm0, dword ptr [rip + .LCPI0_0] # xmm0 = mem[0],zero,zero,zero ret つまり、ループせずに答えを960に設定するだけです。 ただし、コードを次のように変更した場合: …
131 c  gcc  optimization  clang 


4
ブールから整数への変換
この変換はどの程度移植性がありますか。両方のアサーションがパスすることを確認できますか? int x = 4<5; assert(x==1); x = 4>5; assert(x==0); 理由は聞かないでください。私はそれが醜いことを知っています。ありがとうございました。
131 c++  c  c99 

4
GCCのデフォルトのインクルードディレクトリは何ですか?
非常に単純なソースファイルをgccでコンパイルするとき、stdioやstdlibなどの標準インクルードファイルへのパスを指定する必要はありません。 GCCはこれらのファイルを見つける方法をどのように知っていますか? /usr/include内部に配線されたパスがありますか、それとも他のOSコンポーネントからパスを取得しますか?
131 c++  c  linux  gcc  include-path 

12
Cに符号なし浮動小数点数がないのはなぜですか?
質問は奇妙なようです。プログラマーは時々考えすぎます。読んでください... CIでは整数signedとunsigned整数を使用します。符号なし整数に符号付き整数を割り当てるなどのことを行うと、コンパイラーが警告するという事実が気に入っています。符号付き整数と符号なし整数などを比較すると、警告が表示されます。 私はこれらの警告が好きです。彼らは私が私のコードを正しく保つのを助けます。 フロートに同じ贅沢をしてみませんか?平方根が絶対に負の数を返すことは決してありません。負の浮動小数点値が意味をなさない他の場所もあります。符号なしフロートの完璧な候補。 ところで-私は、浮動小数点数から符号ビットを削除することで得られる精度の1つの余分なビットにあまり興味がありません。float彼らは今であるので、私はsにとても満足しています。浮動小数点を符号なしとしてマークし、整数で取得するのと同じ種類の警告を取得したいだけです。 符号なし浮動小数点数をサポートするプログラミング言語については知りません。 それらが存在しない理由は何ですか? 編集: x87 FPUには、符号なし浮動小数点数を処理するための命令がないことを知っています。署名されたfloat命令を使用できます。誤用(たとえば、ゼロ未満になる)は、符号付き整数のオーバーフローが未定義であるのと同じように、未定義の動作と見なすことができます。


14
C / C ++で関数ポインターとデータポインターに互換性がないのはなぜですか?
関数ポインターをデータポインターに変換したり、その逆を行ったりすると、ほとんどのプラットフォームで機能することを確認しましたが、機能するかどうかは保証されていません。これはなぜですか?どちらも単にメインメモリへのアドレスであってはならず、したがって互換性があるべきではないのですか

17
Cプログラム内のテキストファイルをchar []として「#include」
コンパイル時にCプログラムにテキストファイル全体を文字列として含める方法はありますか? 何かのようなもの: file.txt: This is a little text file main.c: #include <stdio.h> int main(void) { #blackmagicinclude("file.txt", content) /* equiv: char[] content = "This is\na little\ntext file"; */ printf("%s", content); } stdoutに出力する小さなプログラム「これは小さなテキストファイルです」を取得しています 現時点ではハックなpythonスクリプトを使用しましたが、お尻が醜く、変数名は1つだけに制限されています。別の方法で教えてもらえますか?


4
sizeof(my_arr)[0]がコンパイルされ、sizeof(my_arr [0])と等しいのはなぜですか?
なぜこのコードはコンパイルするのですか? _Static uint32_t my_arr[2]; _Static_assert(sizeof(my_arr) == 8, ""); _Static_assert(sizeof(my_arr[0]) == 4, ""); _Static_assert(sizeof(my_arr)[0] == 4, ""); 最初の2つのアサートは明らかに正しいですがsizeof()、配列として処理できない整数リテラルに評価する必要があることを理解しているため、最後の行が失敗することを期待していました。つまり、次の行が失敗するのと同じ方法で失敗します。 _Static_assert(4[0] == 4, ""); 興味深いことに、以下は実際にコンパイルに失敗します(同じことをする必要がありますか?): _Static_assert(*sizeof(my_arr) == 4, ""); エラー:単項 '*'の型引数が無効です( 'long unsigned int'があります)_Static_assert(* sizeof(my_arr)== 4、 ""); それが重要であれば、私はgcc 5.3.0を使用しています
129 c  sizeof 

11
GDBにブレークポイントのリストを保存させる
OK、info breakはブレークポイントをリストしますが、この質問のように --command を使用してそれらを再利用するのに適切に機能するフォーマットではありません。GDBには、それらを再び入力可能なファイルにダンプする方法がありますか?デバッグセッションでは、テスト用のブレークポイントのセットを構築した後、GDBを再起動する必要がある場合があります。 .gdbinitファイルには--commandと同じ問題があります。インフォブレークコマンドではなく、人間の消費のためのテーブルをコマンドを一覧表示するのではなく。 詳しく説明すると、次はinfo breakのサンプルです。 (gdb)情報ブレーク Num Type Disp Enb Address What 1ブレークポイントでy 0x08048517を維持<foo :: bar(void)+7>
129 c++  c  debugging  gdb  breakpoints 

7
正規化されたUTF-8とは何ですか?
ICUプロジェクト(今も持っているPHPライブラリは)検索するときに、それが簡単に値を比較するために行うために、ヘルプノーマライズUTF-8文字列に必要なクラスが含まれています。 ただし、これがアプリケーションにとって何を意味するのかを理解しようとしています。たとえば、「互換性の同等性」ではなく「正規の同等性」が必要な場合、またはその逆はどのような場合ですか。

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