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

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

4
なぜCでshort、int、longが発明されたのですか?
私は作成の正確な目的何であったか、トラブルの理解を抱えているshort、intとlongCのデータ型を? 私が尋ねる理由は、サイズが制限されているようには見えないことです- たとえば、shortより小さい限り、どんなサイズでも構いませんint。 では、バイナリの互換性が望めない場合、どのような状況で、たとえばの代わりにunsigned intまたはを使用する必要がありますか?unsigned longsize_t (サイズがわからない場合は、どれをいつ選択するかをどのように知りますか?)
16 c  data-types 

5
配列、ポインター、および関数のC構文がこのように設計されたのはなぜですか?
次のような多くの質問を見た(そして尋ねた!)後 int (*f)(int (*a)[5])C ではどういう意味ですか? そして、人々がC構文を理解するのを助けるためのプログラムを作ったとさえ見て、私は不思議に思わずにはいられません: Cの構文がこのように設計されたのはなぜですか? たとえば、ポインターを設計している場合、「ポインターの10要素配列へのポインター」を次のように変換します。 int*[10]* p; そしてありません int* (*p)[10]; ほとんどの人が同意するだろうと私は思うが、それほど簡単ではない。 だから、なぜ、直感的でない構文ですか?構文が解決する特定の問題(おそらく曖昧さ?)がありますか?
16 c  syntax 

4
C / C ++コードのレベルを向上させる
私は現在3〜4年間プログラミングを行っており、初心者とは呼べないように感じていますが、このサイトで質問を読んで、WTFについて話していると思いますか?最近、プログラミングの本を手にしたときも同じように感じています。 私はいくつかの初期プログラミング本を読みました。C/ C ++に関するものとゲームに関するものです。私は、非常に基本的なAI、シリアル、TCP / IPインターフェースなど、より複雑なものをいくつか書きました。 私はゲームプログラマになることを計画していますが、最近、組み込みシステム(シリアルインターフェイス)で作業する機会を得た後、組み込みシステムにある程度興味を持ちました。 私が見つけることができる中間C ++の本はないので、導入と初心者の本を完了した後、学習を続けるための資料を見つけることは非常に難しいとわかりました。 私の知識とスキルを成長させ、向上させるためにどのようなアドバイスをしますか?特定のリソースをいただければ幸いです。
16 c++  c 

7
科学/エンジニアリングプログラミングをC開発者に伝える推奨方法はありますか?
Webアプリケーションのバックエンドプロセスの一部として、Cに移植する必要がある多くのMATLABコードがあります(この作業には実行速度が重要です)。このコードをC開発者にアウトソースしようとするとき、MATLABコードを理解しているC開発者はほとんどいないと思います(間違っている場合は修正してください)(インデックス作成やメモリ管理などは異なります)。コードが何をするのかを最もよく伝えるために私が従うべき手順を推奨できるC開発者がいるのだろうか? たとえば、MATLABコードを提供し、行ごとに何をしているのかを説明する必要がありますか?または、数学/アルゴリズムを提供し、平易な英語で説明し、C開発者にこの理解を独自の方法で実装させます(たとえば、開発者が複雑な数学の操作方法を理解していると仮定できますか(想像上の数値)、ヒストグラムの生成方法、FFTの実行方法など)? または、より良い方法はありますか?これを行う必要があるのは私が最初ではないことを期待しているので、そこにいるC開発者がこの状況に陥り、このタスクをどのように転送したいのか、従来の知恵を共有できますか? コメントを事前に感謝します。
16 c  matlab 

3
Cの異なる行に関数タイプとメソッド名を配置する理由
私は会社に入社したばかりで、最初のコードレビューでのスタイルコメントの1つは、戻り値の型とメソッド名を別の行にする必要があるというものでした。たとえば、これ void foo() { } これであるべき void foo() { } 私は常に最初のスタイルを使用してきましたが、人々が2番目のスタイルを使用するのは個人的な好み以外の理由があるのではないかと考えていましたか?最初のものは読みやすさを害するとは思わない。Cプログラマーや大規模なオープンソースプロジェクトでは、一方が他方よりも一般的ですか?
16 c  coding-style 

6
メモリのアライメントはどのくらい重要ですか?まだ重要ですか?
しばらくしてから、メモリアライメント、それがどのように機能し、どのように使用するかについて、多くのことを検索して読みました。私が今見つけた最も関連性の高い記事はこれです。 しかし、それでも私はまだそれについていくつかの質問があります: 組み込みシステムでは、コンピューターに大量のメモリが割り当てられていることが多く、メモリ管理の評論を減らすことができます。私は完全に最適化に取り組んでいますが、今では、同じプログラムを比較したり、メモリーの再配置と調整なしで? メモリアライメントには他の利点がありますか?私はどこかでCPUがアライメントされたメモリでより良く/より速く動作することを読んだのですが、それは処理するための命令をより少なくします(あなたの誰かがそれに関する記事/ベンチマークへのリンクを持っている場合)、その場合、違いは本当に重要ですか?これら2つ以上の利点がありますか? 第5章の記事リンクで、著者は次のように述べています。 注意:C ++では、構造体のように見えるクラスはこの規則に違反する可能性があります!(基本クラスと仮想メンバー関数の実装方法に依存するかどうかは、コンパイラーによって異なります。) この記事では主に構造について説明していますが、ローカル変数の宣言もこのニーズの影響を受けますか? C ++でメモリアラインメントが正確に機能する仕組みについて、何か違いがあるように思えますか? この前の質問には「アラインメント」という単語が含まれていますが、上記の質問に対する回答はありません。

1
配列の要素数を計算するために、sizeof(TYPE)よりもsizeof(element)を好むのはなぜですか?
私は「キングKNのCプログラミング」を読んでいて、次の文を見つけました。 式sizeof(a)/sizeof(a[0])を使用して配列内の要素数を計算することについて説明しました。式sizeof(a)/sizeof(t)(tはaの要素の型)も機能しますが、劣った手法と見なされます。 なぜそれが劣った技術と見なされるのですか?
15 c  array 

2
JavaにはJVMがありますが、Cには何がありますか?
Cにはコンパイラーがあることは知っていますが、実行パフォーマンスを決定するものは何ですか? たとえば、if elseブロックで、if elseの代わりにすべてのifがコードに含まれている場合、すべてのifが実行されると判断するものは何ですか?JavaではJVMになりますが、Cでは実行コンパイラのことは何ですか?
15 java  c 

5
定義がソースコードの最後に記述されているときに、C言語でデータと関数の*宣言*が必要なのはなぜですか?
次の「C」コードを検討してください。 #include<stdio.h> main() { printf("func:%d",Func_i()); } Func_i() { int i=3; return i; } Func_i()はソースコードの最後に定義され、で使用する前に宣言は提供されませんmain()。コンパイラがFunc_i()入っmain()てきたまさにその時に、それは出てきてmain()見つけ出しFunc_i()ます。コンパイラは、どういうわけかによって返された値を見つけ、Func_i()それをに渡しprintf()ます。また、コンパイラはの戻り値の型を見つけることができないことも知っていますFunc_i()。それは、デフォルトでは、(guesses?)の戻り値の型を取りFunc_i()ますint。つまり、コードにfloat Func_i()エラーがあった場合、コンパイラは次のエラーを出しFunc_i()ます。 上記の議論から、次のことがわかります。 コンパイラは、によって返された値を見つけることができますFunc_i()。 コンパイラがFunc_i()出てmain()きてソースコードを検索することによって返された値を見つけることができる場合、明示的に言及されているFunc_i()のタイプを見つけることができないのはなぜですか。 コンパイラFunc_i()は、それがfloat型であることを認識している必要があります。そのため、競合する型のエラーが発生します。 コンパイラがそれFunc_iがfloat型であることを知っている場合、なぜFunc_i()int型であると仮定して、競合する型のエラーを与えるのですか?強制的にFunc_i()float型にしないでください。 変数宣言にも同じ疑問があります。次の「C」コードを検討してください。 #include<stdio.h> main() { /* [extern int Data_i;]--omitted the declaration */ printf("func:%d and Var:%d",Func_i(),Data_i); } Func_i() { int i=3; return i; } int Data_i=4; コンパイラーはエラーを示します:'Data_i' undeclared(この関数で最初に使用)。 コンパイラがを見るとFunc_i()、Func_()によって返された値を見つけるためにソースコードに行きます。コンパイラが変数Data_iに対して同じことをできないのはなぜですか? 編集: コンパイラ、アセンブラ、プロセッサなどの内部動作の詳細はわかりません。私の質問の基本的な考え方は、使用後にソースコード内の関数の戻り値を伝える(書き込む)とその関数の「C」言語により、コンピューターはエラーなしでその値を見つけることができます。さて、なぜコンピューターは同様にタイプを見つけることができません。Func_i()の戻り値が見つかったため、Data_iのタイプが見つからないのはなぜですか。extern data-type …

7
Cの任意のブロックの慣用的な使用とは何ですか?
ブロックは、実行されるステートメントのリストです。ブロックがCで現れる場所の例は、whileステートメントの後とifステートメントです while( boolean expression) statement OR block if (boolean expression) statement OR block Cでは、ブロックをブロック内にネストすることもできます。これを使用して変数名を再利用できます。「x」が本当に好きだとします int x = 0; while (x < 10) { { int x = 5; printf("%d",x) } x = x+1; } 5を10回印刷します。変数名の数を少なく保つことが望ましい状況を見ることができたと思います。おそらくマクロ展開で。ただし、この機能が必要な理由はわかりません。誰でも私がこの機能の使用法を理解するのを手伝ってくれますか?
15 c  syntax 

9
Cの学習はコンピューターサイエンスに不可欠ですか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 6年前に閉鎖されました。 私はフロントエンドの開発者で、ファイルの拡張子.hや.c拡張子をほとんど見ていません。私は基本的なC構文を知っています。Unrealityで学習しましたが、単純なことにはあまりにも多くのセットアップが必要だったため、このような低レベルのプログラミングには興味がありませんでした。 コンピューターサイエンスのすべての側面を学ぶことに非常に興味がありますが、コンピューターサイエンスの概念のほとんどを理解するために特定の言語を実際に知る必要はないと信じたいです。しかし、データ構造やアルゴリズム設計などのコンピューターサイエンスの基本的な概念に関する本や記事を読み始めると、すべての例とレッスンさえもC(そして時にはJava)で書かれているため、Cを学ぶ必要があるようです。 私の質問は、Cはコンピューターサイエンスに不可欠なプログラミング言語ですか、それともたまたまCで書かれたすべてのリソースをCで作成したのでしょうか?Cを学習せずにコンピューターサイエンスを学習できますか?

2
C11のkeywordsいキーワードはなぜですか?
現在、C11仕様のドラフトを読んでいます。新しく導入されたキーワード:_Bool, _Alignof, _Atomicのような標準の予約キーワードではなく、すべてカスタム拡張のように感じstruct, union, intます。 標準は基本的に標準化された拡張機能で構成されていることを理解しています...しかし、それでもひどいです!すぐに__Long_Long_Reallylong_Integer_MSVC_2020_t規格に忍び寄ってしまうかもしれません! 非標準コードの後方互換性がキーワードの新しいスタイルの唯一の理由ですか?
15 c  keywords 

4
一部のプログラマーがC、Python、C ++を異なるカテゴリーに分類するのはなぜですか?-レベルについて
私はpythonの入門コースを受講しており、講師はpythonは高レベル言語であり、CおよびC ++は低レベル言語であると言っています。紛らわしいです。C、C ++、Python、Javaなどはすべて高レベル言語だと思いました。 私はC、C ++などのstackoverflowで質問を読んでいたが、それらはすべてそれらの言語を高レベルと呼んでいるようだ。一部のプログラマーはこれらの用語を同じ意味で使用しているようです。

8
リバースエンジニアリング:それは本当に何のためですか?[閉まっている]
ここで何が求められているかを伝えるのは難しいです。この質問は曖昧、曖昧、不完全、過度に広範、または修辞的であり、現在の形式では合理的に答えることができません。この質問を明確にして、再開できるようにするには、ヘルプセンターに アクセスしてください。 7年前に閉鎖されました。 私はいくつかの無邪気な/初心者の質問があります: リバースエンジニアリングの利点は何ですか? プログラマーとして、リバースエンジニアリングの技術を学ぶ必要がありますか? 経験豊富なプログラマーにとってのメリットは何ですか?

7
Cライブラリの関数は常に文字列の長さを期待すべきですか?
私は現在、Cで書かれたライブラリに取り組んでいます。このライブラリの多くの関数は、引数として、char*またはconst char*引数に文字列が必要です。私は、文字列の長さを常に期待しているsize_tので、ヌル終端が必要ないようにそれらの関数から始めました。ただし、テストを作成する場合strlen()、次のようにが頻繁に使用されます。 const char* string = "Ugh, strlen is tedious"; libFunction(string, strlen(string)); 適切に終了した文字列を渡すようにユーザーを信頼すると、安全性は低下しますが、より簡潔で(私の意見では)読み取り可能なコードになります。 libFunction("I hope there's a null-terminator there!"); だから、ここで賢明な慣行は何ですか?APIの使用をより複雑にしますが、ユーザーに入力を考えさせるか、ヌル終了文字列の要件を文書化し、呼び出し元を信頼しますか?
15 c  api  strings 

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