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

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


8
関数をヘッダーファイルまたはソースファイルに文書化する方が良いでしょうか?
「ソース」ファイルと「ヘッダー」ファイル(主にCとC ++)を区別する言語では、ヘッダーファイルに関数を文書化する方が適切です。 (CCANから盗用) /** * time_now - return the current time * * Example: * printf("Now is %lu seconds since epoch\n", (long)time_now().tv_sec); */ struct timeval time_now(void); またはソースファイルで? (PostgreSQLから盗用) /* * Convert a UTF-8 character to a Unicode code point. * This is a one-character version of pg_utf2wchar_with_len. * * No …
86 c++  c  headers 

19
OCamlがもっと人気がないのはなぜですか?
私は常にCであることを聞いた組み込みシステム、または最大速度で実行する必要がある何のために使用する選択した言語。主にポインター演算が好きではなく、言語がアセンブラーの上のラングにすぎないため、私はCが好きではありませんでした。 一方、ML言語は機能的で、ガベージコレクションされた言語であり、OCamlにはオブジェクトモデルさえありますが、Cと同じくらい高速であるという評判があります。ML言語は、高レベルで簡潔なコード、それでも高性能アプリケーションを書くために必要な速度を保持します。 特にOCamlは、組み込みデバイス、グラフィックスドライバー、オペレーティングシステムなど、Cが従来使用されていた場所ならどこでも使用できます。すべての権利により、OCamlは今までに世界を支配していたはずですがそれを使用しました。 これは主観的な質問ですが、なぜOCamlやMLの他の言語はそれほどあいまいなままで、Cや他の言語が普及したのでしょうか?
86 c  ocaml 

8
なぜprintfで先行するのではなく、末尾の改行を使用するのですか?
を使用するときは、先頭の改行を避けるべきだと聞きましたprintf。そのため、代わりにprintf("\nHello World!")使用する必要がありますprintf("Hello World!\n") 上記のこの特定の例では、出力が異なるため意味がありませんが、これを考慮してください。 printf("Initializing"); init(); printf("\nProcessing"); process_data(); printf("\nExiting"); に比べ: printf("Initializing\n"); init(); printf("Processing\n"); process_data(); printf("Exiting"); 見栄えが良いことを除けば、後続の改行を使用しても利点はありません。他の理由はありますか? 編集: ここで、そして今、投票権について話します。この質問は主に設計に関するものであるため、これはStack overflowに属するとは思わない また、この問題に対する意見かもしれませんが、Kilian Fothの回答とcmasterの回答は、1つのアプローチで非常に客観的な利点があることを証明しています。
79 c 

5
CおよびC ++用のパッケージ管理システムがないのはなぜですか?[閉まっている]
パッケージ管理システムが存在するプログラミング言語がいくつかあります。 TeXのCTAN PerlのCPAN Python用のPip&Eggs Maven for Java ハスケルのカバル Rubyの宝石 NodeJSのnpm フロントエンドJavascriptおよびCSSのバウアー C#のnuget PHPの作曲家 そのようなシステムには他の言語がありますか?CとC ++はどうですか?(それが主な質問です!)なぜそのようなシステムがないのですか?yum、apt-getまたはその他の一般的なパッケージ管理システム用のパッケージの作成は改善されていませんか?
78 c++  c  builds  packages 

20
最適化されたコードを読み取り可能なコードに置き換えても大丈夫ですか?
既存のコードを拡張/改善する必要がある状況に陥ることがあります。古いコードは非常にスリムですが、拡張するのも難しく、読むのに時間がかかります。 それを最新のコードに置き換えるのは良い考えですか? 少し前に私は無駄のないアプローチが好きでしたが、今では、より高い抽象化、より良いインターフェース、より読みやすく拡張可能なコードのために多くの最適化を犠牲にするほうが良いように思えます。 コンパイラも同様に良くなっているように見えるので、何も言わずstruct abc = {}にmemsetsに変わり、shared_ptrsは生のポインタをいじるのとほぼ同じコードを生成します。 それでも、スタックベースの配列や、いくつかのあいまいなロジックを持つ古いC関数が表示されることがありますが、通常はクリティカルパスにありません。 どちらかの方法でコードの一部に触れる必要がある場合、そのようなコードを変更することは良い考えですか?

10
C配列が長さを追跡しないのはなぜですか?
配列で配列の長さを明示的に格納しない背後にある理由は何Cですか? 私の考えでは、そうするのには圧倒的な理由がありますが、標準(C89)を支持する多くの理由はありません。例えば: バッファで利用可能な長さがあると、バッファのオーバーランを防ぐことができます。 Javaスタイルarr.lengthは明確であり、プログラマーintが複数の配列を扱う場合にスタックで多くのs を維持する必要がないようにします。 関数パラメーターはより適切になります。 しかし、おそらく私の考えでは、最もやる気の理由は、通常、長さを維持しないとスペースが節約されないからです。配列のほとんどの使用には動的割り当てが含まれると言って思います。確かに、人々はスタックに割り当てられた配列を使用する場合がありますが、それはたった1つの関数呼び出し*です-スタックは4または8バイト余分に処理できます。 ヒープマネージャーは、動的に割り当てられた配列によって使用される空きブロックサイズを追跡する必要があるため、その情報を使用可能にします(そして、コンパイル時にチェックされる追加のルールを追加します。足で自分を撃つのが好きです)。 私が反対側で考えることができる唯一のことは、長さの追跡がコンパイラをより単純にしたわけではないかもしれないが、それほど単純ではないということです。 *技術的には、自動ストレージを備えた配列を使用して、ある種の再帰関数を作成できます。この(非常に精巧な)場合、長さを格納すると、実際にはより多くのスペースが使用されます。
77 c 

12
手続き型プログラミングに対するオブジェクト指向プログラミングの利点は何ですか?
Cのような手続き型言語とC ++のようなオブジェクト指向言語の違いを理解しようとしています。私はC ++を使用したことはありませんが、2つを区別する方法について友人と話し合ってきました。 C ++には変数を定義するためのパブリックモードとプライベートモードだけでなく、オブジェクト指向の概念もあると言われています。Cにはないものです。Visual Basic.NETでプログラムを開発する際にこれらを使用する必要はありませんでした。これらの利点は何ですか? また、変数がパブリックであればどこからでもアクセスできると言われましたが、Cのような言語のグローバル変数とどのように異なるのかは明確ではありません。プライベート変数がローカル変数とどのように異なるのかも明確ではありません。 私が聞いたもう一つのことは、セキュリティ上の理由から、関数にアクセスする必要がある場合、最初に関数を継承する必要があるということです。ユースケースは、管理者がすべてではなく必要なだけの権限を持っている必要があることですが、条件付きでもうまくいくようです: if ( login == "admin") { // invoke the function } なぜこれが理想的ではないのですか? オブジェクト指向のすべてを行うための手続き的な方法があるように思えるのに、なぜオブジェクト指向のプログラミングを気にしなければならないのですか?

14
Cプログラムの実行時に、「int」や「char」などのデータ型宣言子はRAMに保存されますか?
Cプログラムの実行中、データはヒープまたはスタックに保存されます。値はRAMアドレスに保存されます。しかし、タイプインジケーター(intまたは、char)はどうでしょうか。それらも保存されていますか? 次のコードを検討してください。 char a = 'A'; int x = 4; ここで、Aと4がRAMアドレスに保存されていることを読みました。しかし、何についてaとx?最も紛らわしいのは、実行がacharとxintであることをどのように認識するのでしょうか?とは、RAMのどこかにintあり、char言及されていますか? 値がRAMのどこかに10011001として保存されているとします。私がコードを実行するプログラムである場合、この10011001がaであるかどうかをどのように知ることがcharできintますか? 私は理解していないことは、それはそれがあるかどうか、アドレスなどの10001から変数の値を読み取ると、コンピュータが、知っている方法ですintかchar。というプログラムをクリックすると想像してくださいanyprog.exe。コードはすぐに実行を開始します。この実行可能ファイルには、格納されている変数がタイプであるかどうかに関する情報が含まれていますintかchar?
74 c  data 

5
Cコンパイラがそれほど少ないのはなぜですか?
Cは、世界で最も広く使用されている言語の1つです。既存のコードの大部分を占め、膨大な量の新しいコードに引き続き使用されます。ユーザーに愛されており、非常に広く移植されているため、Cを実行できることはプラットフォームの非公式な定義の多くに当てはまります。 それでは、すべてのコンパイラはどこにありますか? デスクトップには、(現実的に)GCCとClangの2つがあります。数秒間考えてみれば、おそらくインテルも存在していることを覚えているでしょう。他の人はほんの一握りで、平均的な人が名前を付けるにはあまりにもあいまいで、ほとんどの場合、最近の言語バージョン(またはよく定義された言語サブセット、単に「サブセット」)をサポートすることをほとんど気にしません。このリストのメンバーの半分は歴史的な脚注です。残りのほとんどは非常に特殊化されており、実際には完全な言語を実装していません。実際にオープンソースであると思われるものはほとんどありません。 SchemeとForth-ファンに愛されている他の小さな言語-はおそらく実際のユーザーよりも多くのコンパイラを持っています。SMLのようなものでも、Cよりも「深刻な」実装を選択できます。一方、検証を目的とする新しい(未完成の)Cコンパイラの発表では、実際にかなり否定的な応答が見られ、ベテランの実装は、 C99。 どうして?Cの実装はとても難しいですか?C ++ではありません。ユーザーは、それがどの複雑なグループに属するかについて非常に歪んだ考えを持っているだけですか(つまり、実際にはSchemeよりもC ++に近いということですか)。

5
ヘッダーファイルに何を含めるべきではありませんか?[閉まっている]
ヘッダーファイルに絶対に含まれてはならないものは何ですか? たとえば、多くの定数を持つ文書化された業界標準形式で作業している場合、ヘッダーファイルで定義することをお勧めします(その形式のパーサーを作成している場合)。 ヘッダーファイルにはどの関数を挿入する必要がありますか? してはいけない機能は何ですか?
71 c  headers 

19
なぜミクロのパフォーマンスと効率を気にする必要があるのですか?
C / C ++ページの多くの質問と回答、具体的または間接的にマイクロパフォーマンスの問題(間接関数と直接関数とインライン関数のオーバーヘッドなど)、またはO(N 2)vs O(N log N)アルゴリズムの使用100アイテムのリスト。 私は、問題がない限り、または問題があることがわかるまで、常にマイクロパフォーマンスを気にせず、マクロパフォーマンスにほとんど気を配らずに、コーディングしやすく、信頼性の高いコードを維持します。 私の質問は、なぜ多くのプログラマーがそんなに気にするのかということです。それはほとんどの開発者にとって本当に問題なのでしょうか、それについてあまり心配する必要がないほど幸運だったのでしょうか、それとも私は悪いプログラマーですか?

10
なぜCはPascalに勝ったのですか?[閉まっている]
私の理解では、1980年代、そしておそらく1990年代にも、PascalとCは実稼働言語としてほとんど真っ向勝負でした。 パスカルの究極の終miseは、ボーランドのデルファイの怠慢によるものですか?または、運が悪かったり、Pascalに本質的に問題があるなど(復活の希望はありますか?) 好き嫌いではなく、歴史的な事実や観察できるバックアップに興味があります。

10
「if」および「while」と一緒に使用する場合、言語が式の周りに括弧を必要とするのはなぜですか?
C、Java、およびC ++のような言語はすべてで使用した場合、式全体の周りに括弧を必要としif、whileまたはswitch。 if (true) { // Do something } とは対照的に if true { // Do something } 括弧が冗長であるため、これは私には奇妙に思えます。この例でtrueは、は単独の式です。括弧は、私が知っている方法でその意味を変えません。なぜこの奇妙な構文が存在し、なぜそんなに一般的ですか?気付いていないのに利点はありますか?

11
ANSI Cが私たちの新しいプロジェクトには不十分であると上司に納得させるにはどうすればよいですか?[閉まっている]
数か月前、社内で開発されたテスト機器を制御し、一連の測定値を記録するアプリの開発を開始しました。シンプルなUIが必要です。また、継続的な記録が必要なため、スレッドが必要になる可能性があります。このアプリケーションは数年間使用され、この期間中は多くのコンピューターサイエンスの学生によって維持されます。 私たちの上司は約30年前に卒業しました(犯罪とは見なされません。私もその半分以上を背負っています)。このアプリケーションをANSI Cで開発することを義務付けています。ほぼ全時間であり、したがって、彼は私たちが何をしているかを理解できなければなりません。彼はまた、抽象データ型を使用しないことを決定しました。彼は私たちが使用したいグローバル変数(ため息)の名前のリストさえも私たちに与えました。 私は実際にしばらくこのアプローチを試しましたが、すべてのポインター操作が安全で、すべての文字列が正しいサイズであることを確認するのに本当に時間がかかりました。さらに、実際に手元の問題に関連するコードの行数は、コードベースのほんの一部でした。数日後、私は全体を廃棄し、C#を使用して新たに始めました。私たちの上司はすでにプログラムが実行されていることを見ており、その動作方法は気に入っていますが、別の言語で書かれていることを知りません。 来週、私たち二人はソースコードを調べるために会い、彼は「それを維持する方法を知っている」。私はちょっと怖いです、そして、私は私の決定を支持するためにどんな議論を使用することができるかあなたたちから聞きたいです。 ward病なあなたのもの、

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