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

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

4
Win32 APIの進化[終了]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 4年前に閉鎖されました。 Windows 32 APIは時間の経過とともに大きく変化しましたか?1998年のCharles Petzoldの著書「Programming Windows、5th Edition」には、関連する情報がまだ含まれていますか、それともほとんどが時代遅れ/古くなっていますか? Windows 32 APIに最近追加された顕著な例(ある場合)は何ですか?
11 books  c  windows  api 

2
C / C ++プロジェクトの依存関係を適切に管理する方法は?
3〜4種類のオープンソースC / C ++ライブラリを使用するプロジェクトがあります。 これらのライブラリをいくつかのプラットフォーム用にビルドし、プロジェクトのさまざまなプラットフォーム用のインクルードファイルとスタティックライブラリをチェックインしました。 しかし、私はいくつかの問題に苦労しています。これらのプロジェクトはすべて、依存関係管理に関するものです。そして、私はベストプラクティスのアドバイスを探しています。 1)何を使用しているのか正確に知るにはどうすればよいですか? 静的libのバージョンを取得する方法がありません。結果として、使用している静的libのバージョンを何らかの方法で追跡する必要があります(ビルド元のコミットのSHAである可能性があります)? これらのライブラリをいつアップグレードするかを理解する必要がある場合、これは特に重要です。 2)ビルドを再現するにはどうすればよいですか? 特定のプラットフォーム用の特定のライブラリーを構築するのに苦労したかもしれません。それを理解するのにしばらく時間がかかりました。 次回同じライブラリを作成する必要があるのは、半年後(なんらかの理由でアップグレードが必要になるとき)になる可能性があります。しかし、そのときまでに、何がどのライブラリで構築されたのかはっきり覚えていません長い間なくなります。 3)これらのライブラリをフォークしてソースコードのコピーを作成する必要がありますか? これはそれほど問題ではありません。しかし、それはまだ問題です。ビルドが再現可能であることを確認するのは良いことです(そのようなソースコードが必要です)。

5
文字列を返す関数、良いスタイル?
私のCプログラムでは、ADTの文字列表現を作成する方法が必要になることがよくあります。文字列を画面に出力する必要がない場合でも、このようなデバッグ方法があると便利です。そのため、この種の機能がよく出てきます。 char * mytype_to_string( const mytype_t *t ); 文字列が返すメモリを処理するために、ここには(少なくとも)3つのオプションがあることを実感しています。 代替方法1:関数の静的文字配列に戻り文字列を格納します。文字列がすべての呼び出しで上書きされることを除いて、私はあまり考える必要はありません。これは、場合によっては問題になることがあります。 代替方法2:関数内のmallocを使用して、ヒープに文字列を割り当てます。バッファのサイズや上書きについて考える必要がないので、本当にすてきです。ただし、完了したら文字列をfree()することを忘れないでください。また、解放できるように一時変数に割り当てる必要もあります。ヒープ割り当てはスタック割り当てよりもはるかに遅いため、これがループで繰り返されるとボトルネックになります。 代替方法3:ポインタをバッファに渡し、呼び出し側にそのバッファを割り当てさせます。お気に入り: char * mytype_to_string( const mytype_t *mt, char *buf, size_t buflen ); これにより、発信者により多くの労力がかかります。この代替案では、引数の順序に関する別のオプションが提供されることにも気づきました。最初と最後のどちらの引数が必要ですか?(実際には6つの可能性) それで、どちらを選ぶべきですか?なんで?Cの開発者の間には、ある種の未記述の標準がありますか?

1
GCCがC ++とCのバイソンから再帰的降下パーサーに切り替えたのはなぜですか?
それを必要とする言語変更、またはバイソンがもはや適切または最適ではなくなったいくつかの実際的な理由はありましたか? 私は上を見ウィキペディア彼らが参照し、切り替えることGCC 3.4とGCC 4.1のリリースノート。 これらのリリースノートには次のように記載されています。 手書きの再帰降下C ++パーサーは、以前のGCCリリースからのYACC派生のC ++パーサーに取って代わりました。新しいパーサーには、C ++ソースコードのより適切な解析、拡張機能の処理、適切なセマンティクス分析と解析の間の(可能な場合は)明確な分離に必要な、大幅に改善されたインフラストラクチャが含まれています。新しいパーサーは、古いパーサーで見つかった多くのバグを修正します。 そして: 古いBisonベースのCおよびObjective-Cパーサーは、新しい、より高速な手書きの再帰下降パーサーに置き換えられました 私が知りたいのは、彼らが抱えていた実際の問題と、Bisonを使用して解決することが不可能/非実用的である理由です。
10 c++  c  parsing  compiler 

3
パック構造体がC言語の一部ではないのはなぜですか?
すべてのCコンパイラは、C構造体(__attribute__ ((__packed__))または#pragma pack())を「パック」するオプションを提供します。信頼できる方法でデータを送信または保存する場合は、パッキングが必要であることは誰もが知っています。これは、C言語の最初の日からの要件でもあったに違いありません。 では、なぜパック構造体がC言語仕様の一部ではないのでしょうか。それらの必要性が数十年前から知られているにもかかわらず、それらはC99またはC11にさえありませんか?何が欠けていますか?なぜコンパイラ固有なのですか?
10 c 

5
CプログラマーがK&Rを読んだことの利点はありますか?[閉まっている]
休業。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善してみませんか?この投稿を編集して、事実と引用で回答できるように質問を更新してください。 6年前休業。 現在、カーニガン&リッチーのCプログラミング言語(K&R)を読んでいるので、この質問は私を悩ませてきましたが、私は多くの人と出会いました。 だから、私の質問は:K&Rを読むことには利点がありますか?必需品でしょうか?
10 c 

1
fread / fwriteの最適なバッファーサイズ[終了]
閉まっている。この質問はトピックから外れています。現在、回答を受け付けていません。 この質問を改善してみませんか? 質問を更新して、ソフトウェアエンジニアリングスタック交換のトピックになるようにします。 7年前休業。 POSIXのfread / fwrite関数を介した読み取り/書き込みファイルには、どのバッファーサイズを選択すればよいですか?
10 c 

5
プログラミングを学ぶときに自分自身を将来保証する[終了]
閉まっている。この質問はトピックから外れています。現在、回答を受け付けていません。 この質問を改善してみませんか? 質問を更新して、ソフトウェアエンジニアリングスタック交換のトピックになるようにします。 3年前休業。 必要に応じて、「将来を見据えた」方法でプログラミングする方法を学びたいです。Windowsが(今のところ)デスクトップOS市場を支配していますが、その言語、フレームワーク、APIなどを学ぶことには明らかに大きな価値があります。これは、新しいデバイスが登場したり、Windowsが足を踏み入れたり(Windows -Windows 8のプレビューはあまり魅力的に見えません...)。 GUI用のJavaなどの非常に移植性の高い言語と組み合わせて、バックエンドロジック/低レベルプログラミングなどのC / C ++に関する確かな知識があることは、ソフトウェア開発の良い基礎になると思いますか?それは、ほとんどのシステムで役立つでしょうか?-私はデスクトップPC、タブレット、電話を話している。
10 java  c++  c  portability 

3
次数引数を指定したトリガー関数が-0.0を返すのはいつですか?
トリグ関数を作成する際にmy_sind(d)、my_cosd(d)、my_tand(d)、度引数はなくラジアンいずれかを使用し、90の倍数で正確な回答を提供される、私は結果が時々あったことに気づいた-0.0のではなく0.0。 my_sind( 0.0) --> 0.0 my_sind(-0.0) --> -0.0 my_sind(180.0) --> -0.0 my_sind(360.0) --> 0.0 sin()そしてtan()、典型的には、所与の記号ゼロ入力に対して同じ符号ゼロ結果を返します。これは、意味になりmy_sin()一致している必要がありsin()、それらの入力のために。 my_sind( 0.0) alike sin( 0.0) --> 0.0 my_sind(-0.0) alike sin(-0.0) --> -0.0 質問です:全体の数は、何のためにnon_zero_n/結果は、これまで返すことがなければならない-0.0ためmy_sind(180*non_zero_n)、my_cosd(180*n + 180)、my_tand(180*non_zero_n)? コードを書くのは簡単なので、それをf(-0.0)生成して実行するだけ-0.0です。他の(ゼロ以外の)に対して他の f(x)リターンを行う理由があるかどうか、そのサインを保証することの重要性について簡単に疑問に思います。-0.0x 注:これは、なぜ0.0vs -0.0が発生するかという問題ではありません。これが理由でcos(machine_pi/4)戻りません0.0。これは、0.0またはの生成を制御する方法の問題でもありません-0.0。私はそれをデザインの問題と考えています。
10 c  math 

5
Cでregisterキーワードが実際に役立つのはいつですか?
registerC でのキーワードの使用について混乱しています。通常、stackoverflowに関するこの質問のように、その使用は必要ないと言われています。 最新のコンパイラーのために、このキーワードはCで完全に冗長ですか、それともまだ有用な状況がありますか?はいの場合、registerキーワードの使用が実際に役立つ状況は何ですか?
10 c  keywords 

7
CとC ++のコードを混在させるべきではないと思います。これは問題ですか、どのように修正しますか?
背景/シナリオ 純粋にCでCLIアプリケーションの作成を開始しました(「Hello World」またはそのバリエーションではない、最初の適切なCまたはC ++プログラム)。途中でユーザー入力(文字配列)の「文字列」を操作していて、C ++文字列ストリーマーオブジェクトを発見しました。これらを使用してコードを保存できることがわかったので、アプリケーションで使用しました。これは、ファイル拡張子を.cppに変更し、g++ではなくでアプリをコンパイルしたことを意味しますgcc。これに基づいて、私はアプリケーションが技術的にC ++アプリケーションであると言います(ただし、コードの90%以上はCと呼ばれるもので記述されていますが、二つ)。これは、約900行の単一の.cppファイルです。 重要な要素 私はプログラムを無料で(お金のように)自由に配布し、すべての人が使用できるようにしたいと考えています。私の懸念は、誰かがコードを見て、以下の影響について何かを考えることです: ああコーディングを見て、それはひどいです、このプログラムは私を助けることができません 潜在的にそれができるとき!もう1つの問題は、コードが効率的であることです(イーサネット接続をテストするためのプログラムです)。アプリケーションやその出力のパフォーマンスを著しく妨げるほど非効率なコードの部分があってはなりません。ただし、特定の関数、メソッド、オブジェクト呼び出しなどのヘルプを求めるときのスタックオーバーフローの問題だと思います。 私の質問 (私の意見では)CとC ++を混在させるべきではないのですが。それをすべてC ++で書き直そうとする必要がありますか(これにより、新しいC ++テクニックを使用して圧縮できるCスタイルで何かをコーディングした可能性があるC ++オブジェクトとメソッドを実装することを意味します)、または文字列ストリーマーオブジェクトとすべてをCコードに「戻し」ますか?ここに正しいアプローチはありますか?私は迷っていて、このアプリケーションを大衆の目に「良い」状態に保つ方法についてのガイダンスが必要です。大衆の目には、それを使用して利益を得るでしょう。 コード-更新 ここにコードへのリンクがあります。約40%のコメントです。流暢になるまで、ほぼすべての行にコメントします。ただし、リンクしたコピーでは、ほとんどすべてのコメントが削除されています。これで読みづらくならないことを願っています。誰もがそれを完全に理解する必要がないことを望んでいます。致命的な設計上の欠陥を作った場合でも、それらを簡単に識別できることを願っています。また、Ubuntuデスクトップとラップトップをいくつか書いています。コードを他のオペレーティングシステムに移植するつもりはありません。
10 c++  c 

5
ライブラリとしてgccを使用する方法はありますか?
誰でも次のように機能するソリューションを知っています。 #include <stdio.h> #include <gcc.h> /* This .h is what I'm looking for. */ int main (void) { /* variables declaration (...) */ /* The following line is supposed to be equivalent to: * $ gcc main.c -o main */ results = gcc_compile_and_link("main.c", "main"); /* Now I want to use …
10 c++  c  gcc 

5
プリプロセッサディレクティブまたはif(定数)ステートメントを使用する方が良いですか?
多くの異なる衣装に使用されるコードベースがあり、タイプXの衣装にのみ関連するいくつかのコードがあるとします。このコードをタイプXの衣装にのみ含めるには、プリプロセッサディレクティブを使用する方が良いですか、またはifステートメントを使用するには?より明確にするために: // some code #if TYPE_X_COSTUMER = 1 // do some things #endif // rest of the code または if(TYPE_X_COSTUMER) { // do some things } 私が考えることができる引数は次のとおりです。 プリプロセッサディレクティブにより、コードフットプリントが小さくなり、ブランチが少なくなります(最適化されていないコンパイラでは) ステートメントが常にコンパイルされるコードで発生する場合、たとえば、誰かが間違いを犯して、彼が取り組んでいるプロジェクトの無関係なコードに悪影響を与える場合でも、エラーは表示され、コードベースは破損しません。そうでなければ、彼は腐敗に気づかないでしょう。 私は常に、プリプロセッサーの使用よりもプロセッサーの使用を優先するように言われました(これがまったく議論の場合...) 何が望ましいですか-多くの異なる衣装のコードベースについて話すとき?
10 c++  c 

6
Cを学ぶための実用的な方法は?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は事実、参考文献、専門知識によって裏付けられると期待していますが、この質問は、議論、議論、投票、または拡張ディスカッションを求める可能性があります。この質問を改善でき、再開できると思われる場合は、ヘルプセンターにアクセスしてください。 7年前休業。 私はCを掘り下げたいのですが、通常、新しい言語を学びたいときは、いくつかの実用的な目的(APIを使用する、タスクを自動化するなど)を持つシンプルで達成可能なプロジェクトの目標を考えます。 私がCの1つを思い付くのは、主にCの主な用途が現在組み込みシステムとオペレーティングシステムのようなより複雑なソフトウェアプロジェクトであることを指摘しているためです。 これは、私がそれを学ぶ必要がないという事実、または私の学習戦略でもう少し複雑にする必要があるという事実を指摘していますか? 実践的な学習リソースへの参照?(チュートリアル/どのようにそれが何らかの目的/利益を持つ最終結果を生み出すか)
10 learning  c 

5
CでのAPI設計の落とし穴[終了]
休業。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善してみませんか?この投稿を編集して、事実と引用で回答できるように質問を更新してください。 4年前休業。 C API(標準ライブラリ、サードパーティのライブラリ、プロジェクト内のヘッダーなど)の問題を引き起こす欠陥は何ですか?目標は、CでのAPI設計の落とし穴を特定することです。これにより、新しいCライブラリを作成するユーザーは、過去の過ちから学ぶことができます。 欠陥が悪い理由を説明し(できれば例を挙げて)、改善策を提案してください。あなたの解決策は実際には実用的ではないかもしれませんが(修正するには遅すぎますstrncpy)、将来のライブラリライターのために準備を整える必要があります。 この質問の焦点はC APIですが、他の言語でそれらを使用する能力に影響を与える問題は大歓迎です。 民主主義が回答を分類できるように、回答ごとに1つの欠陥を指定してください。
10 c  api-design  pitfalls 

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