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

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

11
Cでのシフトと乗算の時間の違いをテストすると、違いはありません。どうして?
バイナリのシフトは、2 ^ kを乗算するよりもはるかに効率的であると教えられました。だから私は実験したかったので、次のコードを使用してこれをテストしました。 #include <time.h> #include <stdio.h> int main() { clock_t launch = clock(); int test = 0x01; int runs; //simple loop that oscillates between int 1 and int 2 for (runs = 0; runs < 100000000; runs++) { // I first compiled + ran it a few times with …

7
CスキルよりもC ++スキルが高いですか?[閉まっている]
よく見られるC / C ++は、CVでのスキルを実際には説明していないように感じます。それで、私はそれを高度なC ++知識と平凡なCスキルに分けることを計画しています。 これは読者を混乱させると思いますか?「CはC ++のサブセットです。だから、この男は私に電話をかけようとしているのでしょうか?」まあ、私が伝えようとしているのは、私が趣味だけの純粋なCプロジェクトである間に、私はいくつかの現実世界のC ++プロジェクトをしました。熟練したC ++プログラマーが必ずしも資格のあるCの人ではないことに同意しますか、またはこの切り替えは簡単に行われると思いますか?
28 c++  c  skills 

10
CとC ++を知っているのに、なぜC ++ 11を学ぶのですか?[閉まっている]
私はCとC ++のプログラマーですが、どちらの言語にも固執せず、2つの混合物を作成します。場合によっては、演算子のオーバーロードやテンプレートを使用したクラス内のコードを使用することもありますが、非常に優れたSTLは明らかに優れた方法です。単純なC関数ポインターを使用すると、はるかに読みやすく、明確になる場合があります。だから、私は両方の言語に美しさと実用性を見出しています。「それらを混ぜてC ++コンパイラでコンパイルすれば、それはもはや混同ではなく、すべてC ++である」という議論には入りたくありません。また、C対C ++については説明しません。この質問はすべてC ++ 11についてです。 C ++ 11では、C ++の動作に大きな変化があると思うものを紹介していますが、さまざまな機能が異なる状況でどのように動作するかを変更する多くの特殊なケース、例外、不規則性を導入し、多重継承、キーワードとして機能する識別子、拡張機能を制限しています文字列リテラル、ラムダ関数変数のキャプチャなど 将来のある時点で、C ++と言うとき、誰もがC ++ 11を想定することを知っています。最近Cを言うときと同じように、おそらくC99を意味します。そのため、C ++ 11の学習を検討します。結局、C ++でコードを書き続けたい場合、同僚が持っているという理由だけで、これらの機能の使用を開始する必要があるかもしれません。 Cを例にとります。何年も経った今でも、Cでコードを学んだり書いたりする人がたくさんいます。なぜですか?言語が良いからです。良い意味は、優れたプログラミング言語を作成するための多くの規則に従っていることです。そのため、Cは強力である(ほとんどすべてのプログラミング言語がそうであるか難しい)ことに加えて、Cは規則的であり、もしあれば例外はほとんどありません。しかし、C ++ 11はそうは思いません。C ++ 11で導入された変更によって言語が改善されているかどうかはわかりません。 質問は次のとおりです。なぜC ++ 11を学ぶのでしょうか。
28 learning  c++  c  c++11 

9
ScalaがCまたはC ++で実装されなかった理由
ScalaがCやC ++ではなくJavaと.NETで実装された理由を知っている人はいますか?ほとんどの言語はCor C ++で実装されています(つまり、Erlang、Python、PHP、Ruby、Perl)。Javaおよび.NETライブラリにアクセスできること以外に、Javaおよび.NETで実装されたScalaの利点は何ですか? 更新 Scalaは、Cで実装された場合、JVMに依存するよりもより適切に調整できるため、より多くの利益を得られませんか?
28 java  c++  .net  c  scala 

2
printfファミリの関数の形式指定子としてパーセント記号(%)が選択されたのはなぜですか?
少なくともCではprintf、関数ファミリを使用して書式設定された文字列を印刷することを誰もが知っています。また、これらの関数はパーセント記号(%)を使用して、書式指定子の始まりを示します。例えば、%d印刷することを意味しint、そして%u手段印刷しますunsigned int。printf関数とフォーマットのプレースホルダーがどのように機能するのかよくわからない場合、または単にリフレッシャーが必要な場合は、Wikipediaの記事を参照してください。 私の質問は、これが元々、または将来フォーマット指定子として選択されるべきである特に説得力のある理由がありますか? 明らかに、この決定はかなり前に行われ(C言語の前任者である可能性が非常に高い)、それ以降は多かれ少なかれ「標準」になっています(Cだけでなく、他の多くの言語でもさまざまな程度に構文を採用しているため)、変更するには遅すぎます。しかし、なぜこの選択​​が最初に行われたのか、同様の機能を備えた新しい言語を設計している場合の選択肢としてそれが理にかなっているのかについて誰かが洞察を持っているのであれば、私はまだ興味があります。 たとえば、C#(および他の.NET言語ファミリ)を使用して、Microsoftは文字列フォーマット関数の操作に関してわずかに異なる決定を下しました。そこにある程度のタイプセーフティを適用できますが(printfC の実装とは異なります)、したがって対応するパラメーターのタイプを示す必要はありませんが、中括弧({})のゼロインデックスペアを使用することにしました次のような形式指定子として: string output = String.Format("In {0}, the temperature is {1} degrees Celsius.", "Texas", 37); Console.WriteLine(output); // Output: // In Texas, the temperature is 37 degrees Celsius. String.Format一般的な複合フォーマットに関するこの記事と同様に、メソッドのドキュメントには詳細情報が含まれていますが、正確な詳細はかなり重要ではありません。ポイントは%、フォーマット指定子の開始を示すために使用するという長年の慣行を放棄したということです。C言語は{d}and を簡単に使用でき{u}たはずですが、そうではありませんでした。誰が、なぜ、この決定が振り返って意味をなすか、そして新しい実装がそれに続くべきかどうかについての考えを持っていますか? 明らかに、文字列自体に含めることができるようにエスケープする必要のない文字を選択することはできませんが、その問題は、そのうちの2つを使用するだけで既に十分に解決されています。関連する他の考慮事項は何ですか?
27 c  history 


7
タイプセーフな構造体ポインターではなく、パブリックAPIでのキャストを必要とする不透明な「ハンドル」を使用する理由
現在公開APIが次のようになっているライブラリを評価しています。 libengine.h /* Handle, used for all APIs */ typedef size_t enh; /* Create new engine instance; result returned in handle */ int en_open(int mode, enh *handle); /* Start an engine */ int en_start(enh handle); /* Add a new hook to the engine; hook handle returned in h2 */ int …

5
C ++テンプレートは単なるマクロの一種ですか?
このようなC ++テンプレートとC#/ Javaジェネリックのさまざまな比較から、 https://stackoverflow.com/questions/31693/what-are-the-differences-between-generics-in-c-and-java-and-templates-in-c/31929#31929 C ++テンプレートは、コンパイルではなく、何らかの種類の前処理(解析前のプレーンテキスト置換)によって実装されているという認識を得ました。C ++テンプレートの型チェックはCマクロに似ているためです。エラーがある場合、それらはテンプレート自体からではなく、テンプレートコードブロックを処理した後に生成されたコードからのエラーです。言い換えれば、それらはCのマクロの一種の上位バージョンにすぎません。 次に、これをサポートする他のいくつかの事実を見つけました- C ++テンプレートが前処理によって実装される場合、動的リンク(.dllを使用)に問題があると思いました。そして、クイックグーグルがこれをサポートしました。 もう1つのポイントは、整数定数を引数としてテンプレートに渡すことができるということです。また、何らかの再帰をサポートします。ただし、この再帰は、コンパイルされたアセンブリ/マシンコードにはありません。再帰的なことは、すべての再帰呼び出しに対して関数を生成することにより、コンパイル時に管理されます。したがって、より大きく、より高速な実行可能バイナリを持ちます。 Cマクロとは異なりますが、いくつかの優れた機能があります。しかし、C ++テンプレートは何らかの前処理で実装されていませんか?これは異なるC ++コンパイラでどのように実装されていますか?
27 c++  c  compiler  templates  macros 

3
一部のマシンでlong intに12バイトかかるのはなぜですか?
私のマシンでこのコードをコンパイルした後、奇妙なことに気付きました: #include <stdio.h> int main() { printf("Hello, World!\n"); int a,b,c,d; int e,f,g; long int h; printf("The addresses are:\n %0x \n %0x \n %0x \n %0x \n %0x \n %0x \n %0x \n %0x", &a,&b,&c,&d,&e,&f,&g,&h); return 0; } 結果は次のとおりです。すべてのintアドレスの間に4バイトの違いがあることに注意してください。ただし、最後のintとlong intの間には、12バイトの違いがあります。 Hello, World! The addresses are: da54dcac da54dca8 da54dca4 da54dca0 da54dc9c da54dc98 …
26 c  memory  pointers 

5
2つの異なる言語で2つの異なるプログラミングをやり取りするにはどうすればよいですか?
これが広すぎるかどうかはわかりませんが、私はまだ大学の若いプログラマーです。私は、さまざまな言語について十分に理解しており、かなり良い基盤を持っていると感じています。しかし、たとえば、プログラムを作成しようとしていて、Pythonで簡単に作業できるという理由だけでPythonの一部を書いたとしますが、このプログラムは、私が書いた別のプログラムから出力を取得する必要があるとしたらどうでしょうかCで私はその速度のためにCを使用しています。2つの異なるプログラムと言語を相互作用させて、全体で1つのプログラムを作成する方法がわかりません。私はあなたがファイルに書き込むことができると確信しているが、それからpythonとCプログラムの両方がファイルにアクセスする場合、ロックを考える必要があると思う。 ほとんどの場合、これはファイルをプログラムにインポートすることでしたが、その場合、ファイルは同じ言語なので簡単にインポート機能を使用しますが、2つの言語/プログラムが相互作用して1つのまとまりのある出力を作成すると問題が発生します。 学ぶためだけにいくつかの基本的なWebアプリケーションを作成することを考えていたので、この質問について考えていましたが、pythonまたはその逆で書いたものとjavascriptファイルをインタラクティブに言う方法がわかりません。 ここで本当に簡単なことを見逃しているだけで、理解していないように感じます。この質問が広すぎる場合は申し訳ありませんが、オンラインで明確な答えを見つけることができなかった場合、オープンソースのwebappを調べようとしていましたが、それから答えを実際に把握できませんでした。これは、stackexchangeで読むのが好きな人に尋ねるのに適した場所です。 返信ありがとうございます。
26 python  c 

9
コンパイラの警告を無効にする必要があるのはなぜですか?
この回答とそれに追加されたコメントは、#pragmaディレクティブを使用していくつかのコンパイラ警告を無効にする方法を示しています。 なぜそれをしたいのでしょうか?通常、警告は理由があるので、私は常にそれらが正当な理由だと感じています。警告を無効にする「有効なケース」はありますか?今は何も考えられませんが、多分それは私だけです。
26 c#  c++  c  warnings 

3
ポインタをインクリメントする理由
私は最近C ++の学習を始めましたが、ほとんどの人が(これまで読んでいたことによると)ポインターに苦労しています。 伝統的な意味ではなく、私はそれらが何であり、なぜ使用されているのか、どのように役立つのかを理解していますが、ポインタのインクリメントがどのように役立つかを理解することはできません、誰もポインタのインクリメントが便利な概念と慣用的なC ++? この質問は、Bjarne StroustrupによるA Tour of C ++の本を読み始めた後に出てきたものです。 。
25 c++  c  pointers 

11
Cのvoidがvoidではないのはなぜですか?
JavaやC#などの厳密に型指定された言語では、メソッドの戻り値型としてvoid(またはVoid)を意味するようです: このメソッドは何も返しません。なし。返品不可。このメソッドからは何も受け取りません。 本当に奇妙なのは、Cではvoid、戻り値の型として、またはメソッドのパラメーターの型としても、 それは本当に何でもありえます。調べるには、ソースコードを読む必要があります。がんばろう。それがポインタである場合、あなたは何をしているかを本当に知っている必要があります。 Cの次の例を検討してください。 void describe(void *thing) { Object *obj = thing; printf("%s.\n", obj->description); } void *move(void *location, Direction direction) { void *next = NULL; // logic! return next; } 明らかに、2番目のメソッドはポインターを返しますが、これは定義上何でもかまいません。 CはJavaやC#よりも古いので、なぜこれらの言語はvoid「何も」を意味するものとして採用したのに、Cは「何も何も(ポインターの場合)」として使用しませんでしたか?
25 c  pointers 

4
C以外のC ++リンケージ言語?
C ++言語では、1つのソースファイルでC ++とCの両方を混在させることができます。例えば、 extern "C" { struct bar { /* ... */ } } C ++またはC以外の「リンケージ言語」をサポートしたことがありますか?例extern "Pascal"またはextern "Haskell"


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