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

Cは、オペレーティングシステム、ゲーム、その他の高性能作業に使用される汎用のコンピュータープログラミング言語です。

3
良いC可変長配列の例[終了]
休業。この質問には、より焦点を当てる必要があります。現在、回答を受け付けていません。 この質問を改善してみませんか?質問を更新して、この投稿を編集するだけで1つの問題に焦点を当てます。 4年前休業。 この質問はSOでかなりフリーズしたレセプションを得たので、そこで削除して代わりにここで試すことにしました。ここにも当てはまらないと思われる場合は、少なくとも私が求めている例を見つける方法の提案についてコメントを残してください... C99 VLAを使用することで、現在の標準ヒープを使用するC ++ RAIIメカニズムなどよりも優れた例を挙げていただけますか? 私が後の例は次のとおりです: ヒープを使用するよりも簡単に測定できる(おそらく10%)パフォーマンスの利点を実現します。 アレイ全体をまったく必要としない、適切な回避策はありません。 実際には、最大サイズを固定する代わりに、動的サイズを使用するメリットがあります。 通常の使用シナリオでスタックオーバーフローが発生することはほとんどありません。 C ++プロジェクトにC99ソースファイルを含めるためのパフォーマンスを必要とする開発者を誘惑するのに十分な強さである。 文脈上のいくつかの明確化を追加:C99の意味と、標準C ++に含まれていないように私は、VLAを意味:int array[n]どこn変数です。そして、私はそれが他の標準(C90、C ++ 11)によって提供される代替手段に勝るユースケースの例の後にいます: int array[MAXSIZE]; // C stack array with compile time constant size int *array = calloc(n, sizeof int); // C heap array with manual free int *array = new int[n]; // …
9 c++  c  stack  heap 


3
マルチコアプロセッサ向けのLinuxにおけるロックフリーIPC
マルチコアプロセッサを搭載したCで、Linux上のロックフリーIPCを使用してアプリケーションを作成する方法を見つけようとしています。 FIFOまたは共有メモリに書き込むプロセス1とプロセス2があるとします。次に、プロセス3とプロセス4がその共有メモリまたはFIFOから読み取ります。 これはロックフリーアルゴリズムで可能ですか? ご指導をよろしくお願いいたします。

8
関数の先頭ではなく、内部ブロックに宣言を置くことの不利な点は何ですか?
私が働いている場所には、変数の宣言の配置に関する明確なガイドラインがあります。それによると、内部ブロック(forループなど)ではなく、グローバルレベルまたは関数の最初にそれらを配置する必要があります。それらは私よりも経験豊富な人たちによって指定されているので、それには正当な理由があるに違いないと私は確信しているが、それが何であるかを理解することはできない。それらをより大きなスコープで宣言させることでコンパイル時/実行時の利点があるかどうかを知るのは良いことです。

6
Cで関数型プログラミングを学ぶことができますか?[閉まっている]
休業。この質問には詳細または明確さが必要です。現在、回答を受け付けていません。 この質問を改善してみませんか?詳細を追加し、この投稿を編集して問題を明確にしてください。 4年前休業。 ここでのコメントディスカッションの結果、Cで関数型プログラミングを学ぶことができるかどうか疑問に思います。
9 c  paradigms 

3
特定の言語での「経験」とは何ですか?[閉まっている]
休業。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善してみませんか?この投稿を編集して、事実と引用で回答できるように質問を更新してください。 4年前休業。 私は現在、CSの学生で、特にAndroidやiOS向けのアプリを開発したいという理由で、夏のインターンシップを探しています。さまざまな機会(私が特定したものだけでなく、あらゆるソフトウェア開発の機会)の要件を検討すると、「x、y、zなどの経験」と表示されます。私の質問:特定の言語またはテクノロジーの経験として正確に何がカウントされますか?VBからMIPSアセンブリに至るまで、大学の研究でいくつかの言語を使用する機会があったことは幸運です。しかし、個人的には、いくつかの例外はありますが、自分がポジションに落ちてx日付をyでコーディングするように指示するために使用してきたほとんどの言語については、十分な知識があるとは思いません。言語の基本を知っているかもしれませんが、 私が今直面している特定の例を使用するには:興味のあるインターンシップでは、要件としてCまたはC ++、あるいはその両方の経験をリストします。私はCでいくつかの作業を行いました。できることとできないこと、K&Rを所有して読んだり、ポインターの動作を理解したりしています。しかし、実際にはCで大量のコードを記述していません。いくつかの短いプログラムを作成し、他のいくつかを変更しましたが、実際にメモリ割り当てを管理したり、目的の機能を生成するためにいくつかの抽象化を考えたりしなければならないほど大きなものを書いたことはありません。そのため、概念的な理解はあるように感じますが、適用していません。概念の理解は経験としてカウントされますか?私は常に自分の知識を学び、拡大することに熱心ですが、私はまた、あまり約束したくありません(これはあなたがしていることの反対のようです) 考え?助言?

6
オブジェクト指向システムで、クラスではなく(Cスタイルの)構造体を選択するとしたら、どこを選択すればよいでしょうか。
Cおよび他の多くの言語では、struct構造(または同様の方法)を作成するためのキーワードが提供されています。これらは(少なくともCでは)クラスのような単純化された観点からですが、ポリモーフィズム、継承、メソッドなどはありません。 Cスタイルの構造体を持つオブジェクト指向(またはマルチパラダイム)言語を考えてみてください。クラスではなく、どこで選びますか?現在、クラスはOOPでそれらの目的を置き換えるように見えるので、それらがOOPで使用されるとは思われませんが、オブジェクト指向プログラムのクラスよりも優先される可能性のある状況や、どのような状況にあるのでしょうか。そのような状況はありますか?

6
Cでは、*は演算子ですか、それとも宣言の型の一部ですか?
Cでは*、間接演算子または間接参照演算子と呼ばれます。ステートメントで使用した場合の動作を理解しています。*por * pは、単項演算子であることを考えると、意味があります。 ただし、宣言で*は、a が使用されることがあります。 void move(int *units) { ... } または int *p = &x; ここで演算子を使用しているのは不思議です。次のようなことはできません void move(int units++) { ... } どこ++にも単項演算子です。これ*は間接演算子でも*ありますか、それともポインタの型について何かを言っている別の意味がありますか?(これが当てはまる場合、私はたとえばint* units宣言などで使用することを検討していますが、int x = *p;それ以外は明確にするためです。) で、この答えはと言われています C標準では、*演算子に対して2つの意味のみを定義しています。 間接演算子 乗算演算子 これ*は実際にはタイプの一部であると主張する人々も見ました。これは私を混乱させます。
9 c  pointers  operators 

5
C / C ++で記述されたアプリケーション間でメモリを共有する方法
ロボット工学の制御のために、C / C ++で書かれたプログラムを実行しています。基本的に、3つの異なるプログラムが同時に実行され、共有メモリを介して通信します。私が見つけた周りのグーグルリンギングは、vxWorksやboostライブラリのプロセス間ヘッダーのようなものだ(Boostのドキュメント:プロセス間でのメモリの共有)。 今、私は実装を見たくありません、上のリンクを読むことができます。しかし、boostライブラリがこれをどのように実行するかについて、頭を動かすことはできません。つまり、1つのアプリケーションがメモリを割り当て、他のアプリケーションがそのメモリにアクセスしますが、それらはどのように通信しますか?これを行うのは危険ではありませんか?
9 c++  c  memory  memory-usage  boost 


2
Cが同じ変数の複数のグローバル宣言を許可し、複数のローカル宣言を許可しないのはなぜですか?
グローバル変数を複数回宣言すると、コンパイラは警告を出力しません。 ただし、たとえば関数内でローカル変数を複数回宣言すると、gccコンパイラーはエラーを出力し、ファイルをコンパイルしません。(私はgccに関して質問しますが、これはより一般的な言語設計の質問であり、gccについての質問ではありません。他のコンパイラーが同様に動作する可能性があるためです)。 この動作の説明は何ですか?

6
mallocの効率と実装の違いは?
私が使用している場合はmalloc、ないmallocにかかわらず、常にそれが配分されているものと同じアルゴリズムを使用するか、それがデータを見て、appriopriateアルゴリズムを選択しますか? より効率的なアルゴリズムを選択することにより、mallocをより速くまたはよりスマートにすることができますか?私のテストではmalloc、テスト結果が正しければ、Ubuntuの組み込み公式システムは学校プロジェクトよりも10倍遅くなります。キャッチとは何ですか?malloc最適化する必要があるため、テストでのパフォーマンスが非常に悪いことに驚いています。常に同じアルゴリズムを使用していますか?のリファレンス実装はありmallocますか?のソースを確認したい場合malloc、どこを見ればよいですか?私が実行するテストは次のとおりです。 /* returns an array of arrays of char*, all of which NULL */ char ***alloc_matrix(unsigned rows, unsigned columns) { char ***matrix = malloc(rows * sizeof(char **)); unsigned row = 0; unsigned column = 0; if (!matrix) abort(); for (row = 0; row < rows; row++) { matrix[row] = …
8 c  performance  malloc 

4
Cのファイルスコープの「静的」変数は「extern」グローバル変数と同じくらい悪いのですか?
staticCでは、C ++でプライベートクラスメンバー変数を使用する場合に、(スタイルの問題として)ファイルスコープ変数を使用することがよくあります。マルチスレッドプログラムにスケーリングする場合thread_localは、C11または長くサポートされている拡張機能を追加__threadするだけで十分です。私はあなたが内部のすべてを置くことによってC ++とCで正確に同じことを行うことができます知っているstructし、それへのポインタをとる関数のセット作りstruct、その最初の引数としてを。一部のライブラリは、これを広範囲にわたって実行します。しかし、私の個人的なスタイルはstruct、必要に応じて、できるだけ小さくすることです。 「グローバル」変数が非常に悪いと主張する人々をよく読んだり聞いたりします。私はそれらの理由を追っていますが、彼らの議論のほとんどはexternC用語のグローバル変数に関連しているようです。彼らの言うことは確かに真実です。extern宣言された変数の1つまたは2つをプログラム全体で使用すると、処理が大幅に簡略化され、追跡が容易になる場合がありますが、さらに先に進むとプログラムが予測不可能になります。 何についてのstatic変数?彼らはまだ「実際の」グローバル変数と同じ問題を抱えていますか?多分私はこの質問をして私がしていることが正しいと思うなら続ける必要さえないかもしれませんが、今日私は別の「グローバル変数は悪い」種類の投稿を見た、そしておそらくこれはおそらく正しいとここに来ましたそのような質問のための場所。あなたの考えは何ですか? この質問はの重複ではありません。このこの質問はについて尋ねているためexternとstatic他の質問は、ファイル・スコープとブロックスコープについてです一方、非ローカル変数static変数。
8 c  globals 

4
Cの未定義の動作がいつ因果関係の壁を跳んだのか
一部のハイパーモダンCコンパイラは、特定の入力が与えられたときにプログラムが未定義の動作を呼び出す場合、そのような入力は決して受信されないと推測します。その結果、そのような入力が受信されない限り無関係であるコードは排除される可能性があります。 簡単な例として、 void foo(uint32_t); uint32_t rotateleft(uint_t value, uint32_t amount) { return (value << amount) | (value >> (32-amount)); } uint32_t blah(uint32_t x, uint32_t y) { if (y != 0) foo(y); return rotateleft(x,y); } コンパイラは、の評価が0のvalue >> (32-amount)場合に未定義の動作を生成するためamount、関数が0でblah呼び出されることはないと推測yします。fooしたがって、呼び出しは無条件にすることができます。 私が言うことができることから、この哲学は2010年頃にいつか定着したようです。そのルーツについて私が見た最も初期の証拠は2009年に遡り、未定義の動作が発生した場合に明示的に述べているC11標準に安置されていますプログラムの実行のある時点で、プログラム全体の動作が遡って定義されなくなります。 コンパイラは、IEで未定義の動作(逆因果最適化を正当化するために未定義の動作を使用することを試みるべきであるという考えたrotateleft機能がそれを前提とするコンパイラを起こすべきではblah非ゼロと呼ばれている必要がありますy何が今まで引き起こすかどうか、yにゼロ以外の値を保持する)2009年より前に真剣に提唱されましたか?最適化手法として最初に真剣に提案されたのはいつですか。 [補遺] 一部のコンパイラには、20世紀でさえ、ループとその中で計算された値に関する特定の種類の推論を有効にするオプションが含まれています。たとえば、 int i; int total=0; for (i=n; i>=0; i--) { doSomething(); …

5
Cでデータのタイプをprintf()に通知する必要があるのはなぜですか?
このCコードを考えてみましょう: #include <stdio.h> main() { int x=5; printf("x is "); printf("%d",5); } これで、私たちが書いたときに整数であるint x=5;ことをコンピューターに伝えましたx。コンピュータはそれxが整数であることを覚えておく必要があります。しかし、xin の値を出力するときは、整数であるprintf()ことをコンピューターに再度通知する必要xがあります。何故ですか? なぜコンピュータはそれxが整数だったことを忘れるのですか?
8 c  io  type-safety 

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