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

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

11
スペースの強化に対処しましたか?
スペースの強化に関しては、ベストプラクティスを研究したいと強く思っています。たとえば、私は(もう記事を見つけることはできませんが)火星探査機の中核部分は動的メモリ割り当てを使用していないことを読んでおり、実際には禁止されていました。私はまた、昔ながらのコアメモリが宇宙で好ましいかもしれないことを読みました。 Google Lunar Challengeに関連するいくつかのプロジェクトを見て、月に、または宇宙にさえコードを入れるのはどんな感じだろうと思っていました。スペースが強化されたボードは、このような過酷な環境である程度の健全性を提供することを知っていますが、(Cプログラマーとして)宇宙で実行する何かを書いている場合、どのように思考とコードを調整する必要があるのでしょうか? 私は今後数年間でプライベートスペース企業の成長がさらに見込めると思うので、少なくともベストプラクティスについてある程度知識を持ちたいと思っています。 断熱材に損傷を与えたボードに放射線、寒さ、または熱が衝突すると、プログラムはどうなりますか?目標は、宇宙船内に人間を置き(物の修理や交換に関する限り)、物事を修理するミッションを避けることだと思います。 さらに、ボードが重要なシステムを維持している場合、早期の警告が最優先されるようです。 テストと試行錯誤を通して、この経験をどのように得ることができますか(あなた自身の個人的な衛星の打ち上げがなければ)?
62 c  memory 

10
関数のオーバーロードのためだけにC ++コンパイラを使用するのは悪い習慣ですか?
そのため、特定のプロセッサでCを使用したソフトウェア設計に取り組んでいます。ツールキットには、CおよびC ++をコンパイルする機能が含まれています。私がやっていることに関しては、この環境で利用可能な動的メモリ割り当てはなく、プログラムは全体的にかなり単純です。言うまでもなく、このデバイスにはプロセッサー能力やリソースがほとんどありません。C ++を使用する必要はまったくありません。 そうは言っても、関数のオーバーロードを行う場所はいくつかあります(C ++の機能)。いくつかの異なるタイプのデータを送信する必要がありますが、printf何らかの%s(またはなんらかの)引数でスタイルの書式設定を使用する気はありません。私はC ++コンパイラにアクセスできない人を何人か見ましたprintfが、私の場合はC ++サポートが利用可能です。 これで、なぜ関数をオーバーロードする必要があるのか​​という疑問を最初から得ることができると確信しています。だから私は今すぐそれに答えようとします。シリアルポートからさまざまな種類のデータを送信する必要があるため、次のデータ型を送信するオーバーロードがいくつかあります。 unsigned char* const char* unsigned char const char 私は、これらすべてを処理する1つのメソッドを持たないことを好みます。私はちょうどそれがシリアルポートを送信する関数を呼び出すときに、私は多くの資源を持っていないので、私はかろうじて行うにはしたくない何でもいいけど、私の送信を。 他の人が私のプログラムを見て、「なぜCPPファイルを使用しているのですか?」だから、それが私の唯一の理由です。それは悪い習慣ですか? 更新 私は尋ねられたいくつかの質問に対処したいと思います: あなたのジレンマに対する客観的な答えは以下に依存します: C ++を使用する場合、実行可能ファイルのサイズが大幅に増加するかどうか。 現在、実行可能ファイルのサイズは、プログラムメモリの4.0%(5248バイトのうち)とデータメモリの8.3%(342バイトのうち)を消費しています。つまり、C ++用にコンパイルしています... Cコンパイラを使用していないため、Cでどのように見えるかわかりません。私はこのプログラムがこれ以上成長しないことを知っているので、リソースがどれだけ限られているかについては、私はそこで大丈夫だと言います... C ++を使用している場合、パフォーマンスに顕著な悪影響があるかどうか。 ある場合、私は何にも気づいていません...しかし、それでも私は完全に理解していないので、私はこの質問をしている理由かもしれません。 Cコンパイラーのみが使用可能な別のプラットフォームでコードを再利用できるかどうか。 私はこれに対する答えが間違いなくノーであることを知っています。別のプロセッサへの移行を実際に検討していますが、より強力なARMベースのプロセッサのみです(事実、C ++コンパイラツールチェーンを持っていることは事実です)。

7
Cの小さなエラーごとにチェックする必要がありますか?
優れたプログラマーとして、プログラムのすべての結果を処理する堅牢なコードを作成する必要があります。ただし、エラーが発生すると、Cライブラリのほとんどすべての関数は0、-1、またはNULLを返します。 たとえば、ファイルを開こうとするときなど、エラーチェックが必要であることは明らかです。しかし、私はしばしば、printfまたはmalloc必要だと感じないからといって、関数のエラーチェックを無視します。 if(fprintf(stderr, "%s", errMsg) < 0){ perror("An error occurred while displaying the previous error."); exit(1); } 特定のエラーを無視するのは良い習慣ですか、それともすべてのエラーを処理するより良い方法がありますか?
60 c  error-handling 

8
CがC ++で不十分な言語の「バインディング」を提供するのはなぜですか?
私は最近、C ++を介してCを使用するタイミングを疑問に思っていました。幸いなことに、誰かがすでに私にそれを打ち負かし、しばらくかかりましたが、私はその質問に対するすべての答えとコメントを消化することができました。 ただし、その投稿の1つの項目は、検証や説明のような例なしで、何度も何度も対処されます。 「Cコードは、ライブラリに複数の言語バインディングが必要な場合に適しています」 それは言い換えです。複数の人がC ++で(いくつかのextern機能を介して)複数の言語バインディングが可能であることを指摘していることに注意する必要がありますが、それでも、その記事全体を読むと、Cが移植性/言語バインディングに理想的であることは明らかです。私の質問は:なぜですか? Cでライブラリを記述すると他の言語でのバインディングや移植性が向上する理由を具体的に説明してください。

13
未定義行動の背後にある哲学
C \ C ++仕様では、コンパイラが独自の方法で実装するための多数の動作が公開されていません。同じことについて常にここで質問され続ける多くの質問があり、それに関するいくつかの素晴らしい投稿があります: https://stackoverflow.com/questions/367633/what-are-all-the-common-undefined-behaviour-that-ac-programmer-should-know-abo https://stackoverflow.com/questions/4105120/what-is-undefined-behavior https://stackoverflow.com/questions/4176328/undefined-behavior-and-sequence-points 私の質問は、未定義の振る舞いについてではなく、本当に悪いことです。危険と標準からの関連する未定義の動作の引用のほとんどを知っているので、それがどれほど悪いかについての回答を投稿することは控えてください。この質問は、コンパイラ実装のために非常に多くの動作を開いたままにすることの背後にある哲学に関するものです。 パフォーマンスが主な理由であると述べている素晴らしいブログ記事を読みました。パフォーマンスがそれを許可するための唯一の基準であるのか、それともコンパイラー実装のためにオープンなままにする決定に影響する他の要因があるのか​​疑問に思っていましたか? 特定の未定義の動作がコンパイラが最適化するのに十分な余地を提供する方法について引用する例がある場合は、それらをリストしてください。パフォーマンス以外の他の要因を知っている場合は、十分な詳細を含めて回答を返してください。 質問を理解していないか、回答を裏付ける十分な証拠/情報源がない場合は、広く推測する回答を投稿しないでください。

12
これはCのgotoの適切なユースケースですか?
私は「議論、議論、投票、または議論を求める」ことを望んでいないので、これを尋ねることを本当にbutしますが、私はCに不慣れであり、言語で使用される一般的なパターンについてより多くの洞察を得たいと思っています。 私は最近、gotoコマンドに対する嫌悪感を聞いたが、最近、それに対するまともなユースケースも見つけた。 このようなコード: error = function_that_could_fail_1(); if (!error) { error = function_that_could_fail_2(); if (!error) { error = function_that_could_fail_3(); ...to the n-th tab level! } else { // deal with error, clean up, and return error code } } else { // deal with error, clean up, and return error code …

4
Cで変数にconstキーワードを使用するタイミングと目的は何ですか?
取得中に私のコードはここに見直さ使用しての問題constのキーワードを思い付きました。変数の読み取り専用動作を実装するために使用されることを理解しています。 私は、さまざまな状況が役に立つときに混乱する。 関数のプロトタイプを明確にするために使用すべきですか? コード開発中のセキュリティ対策として使用する必要がありますか? 実行時定数を宣言するために、さまざまな関数のスコープで使用する必要がありますか? それはまったく使用されるべきですか? これらの質問は、私が直面している混乱のほんの一例です。一般的な混乱は ときにする必要がありますconstCプログラミングで使用するキーワード? Cでこのキーワードを使用することで得られるさまざまなタイプの利点は何ですか? constキーワードを使用することの短所はありますか? 私の質問の詳細にあるこれらすべての質問のために、この質問は広すぎるかもしれないと指摘されています。これらの質問は、主な質問に関する混乱を明確にするためだけのものであることを明確にしたかっただけです。 Cで変数にconstキーワードを使用するタイミングと目的は何ですか? 言い換えることもできます const同じ長所と短所を備えたC` でのキーワードの適切な使用。

15
私はCを知りません。そして、なぜそれを学ぶ必要がありますか?[閉まっている]
私の最初のプログラミング言語はPHP(gasp)でした。その後、JavaScriptの使用を開始しました。私は最近C#で仕事をしました。 Cのような低レベルまたは中レベルの言語を一度も見たことがありません。 大規模なプログラミングコミュニティの一般的なコンセンサスは、「Cのようなことを率直に学んでいないプログラマーは、ポインター、データ型、参照による値の受け渡しなどのプログラミング概念を扱うことができない」ということです。 私は同意しない。私はそれを主張します: 高水準言語は簡単にアクセスできるため、より多くの「プログラマーではない」人が飛び込んで混乱する 高レベルの言語で実際に何かを成し遂げるためには、「学習-低レベル-最初」の福音伝道者のほとんどの支持者と同じ概念を理解する必要があります。 一部の人々はCを知る必要があります。それらの人々は、低から中レベルのコードを書くことを要求する仕事を持っています。私はCが素晴らしいと確信しており、Cを知っているいくつかの悪いプログラマーがいると確信しています。 なぜバイアスなのか?良い、正直、空腹のプログラマーとして、Cを(何らかの予期しない理由で)習得しなければならなかった場合、私はCを習得します。私たちが何に興味があるのか​​を学ぶべきではないでしょうか?有限の時間を利用して前進すべきではないでしょうか?なぜ一部のプログラマーはこれに同意しないのですか? 優れたプログラマーと悪いプログラマーとの間の基本的な決定論的特性は、あなたがしていることの卓越性を追求することだと思います。 Java、Pascal、PHP、JavaScriptなどの高水準言語で記述されたものが、Cの事前知識から実際にどのように恩恵を受けたのか、実世界の例はありますか?例をいただければ幸いです。

15
なぜ後置インクリメントがあるのですか?
免責事項:プレフィックスとポストフィックスのインクリメントのセマンティクスを完全に知っています。したがって、それらがどのように機能するかを私に説明しないでください。 スタックオーバーフローに関する質問を読んで、プログラマがpostfix increment演算子に何度も何度も混乱することに気づかずにはいられません。これから、次の疑問が生じます:後置インクリメントがコード品質の面で本当の利点を提供するユースケースはありますか? 例で私の質問を明確にしましょう。以下は、非常に簡潔な実装ですstrcpy。 while (*dst++ = *src++); しかし、それは私の本の中で最も自己文書化されたコードではありません(そして、それは正気のコンパイラで2つの迷惑な警告を生成します)。それでは、次の選択肢の何が問題になっていますか? while (*dst = *src) { ++src; ++dst; } その後、条件内の混乱する割り当てを取り除き、完全に警告のないコードを取得できます。 while (*src != '\0') { *dst = *src; ++src; ++dst; } *dst = '\0'; (はい、私は知っている、srcそしてdstこれらの代替ソリューションで異なる結末値を持つことになりますが、以来strcpy、すぐにループの後に返す、それはこの場合には重要ではありません。) 後置インクリメントの目的は、コードをできるだけ簡潔にすることだと思われます。私はこれが私たちがどのように努力すべきかを単に見逃しています。これがもともとパフォーマンスに関するものであった場合、それは今日でも関連していますか?
55 c++  c  postfix 

8
C ++のゴミはどうなりますか?
Javaには自動GCがあり、たまに世界を停止しますが、ヒープ上のゴミを処理します。現在、C / C ++アプリケーションにはこれらのSTWフリーズがなく、メモリ使用量も無限に増加しません。この動作はどのように達成されますか?死んだオブジェクトはどのように処理されますか?

5
C内からシェルコマンドを呼び出すことをお勧めしますか?
udevadm info -q path -n /dev/ttyUSB2Cプログラムから呼び出したいUNIXシェルコマンド()があります。おそらく約1週間の闘争で、私はそれを自分で再実装することができましたが、私はそれをしたくありません。 単に電話するのは広く受け入れられている良い習慣popen("my_command", "r");ですか?それは受け入れられないセキュリティ問題を引き起こし、互換性の問題を転送しますか?このようなことをするのは間違っているように感じますが、なぜそれが悪いのかを指で確かめることはできません。
50 c  unix  shell 

6
Cで構造体を返す多くの関数が、実際に構造体へのポインターを返すのはなぜですか?
return関数のステートメントで構造全体を返すのではなく、構造へのポインタを返すことの利点は何ですか? 私はfopen他の低レベル関数のような関数について話しているが、おそらく構造体へのポインタを返す高レベル関数もあるだろう。 これは単なるプログラミングの質問ではなく、設計上の選択であり、2つの方法の長所と短所についてもっと知りたいと思っています。 構造体へのポインターを返すのが利点だと思った理由の1つは、ポインターを返すことで関数が失敗したかどうかをより簡単に判断できることNULLです。 完全な構造を返すのは、NULL私にとっては難しいか、効率が悪いでしょう。これは正当な理由ですか?

2
ヘッダーのみのライブラリはより効率的ですか?
仮定 C ++のヘッダー専用ライブラリの利点の1つは、個別にコンパイルする必要がないことです。 CおよびC ++ inlineでは、関数がヘッダーファイルで定義されている場合にのみ意味があります*。 従来、Cでは、ヘッダーが翻訳単位の最小限のパブリックインターフェイスを表す.c / .hレイアウトが使用されてきました。同様に、.cpp / hpp。 質問 一般に、ヘッダーのみのライブラリは、従来のレイアウトよりもコードおよび実行時間の面で効率的ですか?もしそうなら、これは広範なインライン展開または他の最適化のためですか? *-ヘッダーで関数を定義することで、コンパイラーは翻訳単位のコンパイル中に実装を確認でき、実際にインライン化コードが可能になります
48 c++  c  libraries 

4
最初のC ++コンパイラはどのようにC ++で作成できますか?
Stroustrupは、最初のC ++コンパイラであるCfrontがC ++で作成されたと主張しています(Stroustrup FAQ)。 しかし、最初のC ++コンパイラをC ++で作成することはどのように可能ですか? コンパイラーを構成するコードもコンパイルする必要があります。したがって、最初のC ++コンパイラーをC ++で作成することはできませんでしたか?

3
CおよびC ++を使用したAndroid開発[終了]
私はC、C ++開発者です。モバイル開発に興味があります。CとC ++を使用してAndroidアプリを開発する方法を知りたいのですが、C、C ++開発者向けのキットを提供しているが、Javaキットのすべての機能を備えているわけではないことを読みました。C / C ++開発キットに行くべきですか、それとも将来すべての機能を提供しないかもしれないので、Javaを学ぶほうがよいでしょうか?
47 c++  c  android 

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