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

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

7
C言語の移植性
Cのような言語の移植性はどの程度正確に決定されますか?コンパイラはISA固有であることを学びました。これが本当なら、Cはどのように移植可能ですか?それとも、Cで書かれたソースコードだけが移植可能で、実行可能ファイルではないということですか?x86のサンプルアプリケーションに固有の実行可能ファイルISAは、Appleのアプリケーションとは別のものではありませんか(AppleがMotorola / PowerPCマイクロプロセッサを使用していると仮定)
10 c  languages 

2
ライブラリでのEINTRの適切な処理方法
EINTR図書館で推奨されるエチケットは何ですか? 現在、POSIX APIでいくつかのファイルシステムタスクを実行する関数を書いていますが、使用する多くの呼び出しはを返す可能性がありEINTRます。さらに、この関数は状況によってはブロックされる場合があります。(興味のある人のために、それはロック機構を実装しています。) これをできるだけ一般的にするために、中断されたシステムコールを処理する適切な方法を知りたいと思います。 私が読んだほとんどの情報源から、人々は通常、電話を再試行し、ビジネスを続けます。ただし、かなりの時間がかかる場合があるため、機能を中断する正当な理由がある場合があるため、ここでそれを行うのが正しいかどうかはわかりません。さらに、それはEINTR単にが関数に飲み込まれることを意味し、呼び出し元はそれが発生したことを示しません。 私の現在の戦略はEINTR、発信者に受信して通知した場合、すぐに操作を中止することです。このようにして、呼び出し元は私の機能を再試行するかどうかを決定できますよね?(または、おそらく私の信号の理解に欠陥がありますか?)
10 c  libraries  signals  posix 

3
Clang / LLVMはプライムタイムの準備ができていますか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は事実、参考文献、専門知識によって裏付けられると期待していますが、この質問は、議論、議論、投票、または拡張ディスカッションを求める可能性があります。この質問を改善でき、再開できると思われる場合は、ヘルプセンターにアクセスしてください。 6年前休業。 Clangはgccの代わりに使用できますか?その上であなたの経験は何ですか?まだどのような欠点がありますか? コンパイルのパフォーマンスはgccよりも非常に優れていますが、実行時に生成されるコードのパフォーマンスについてはどうでしょうか。 LinuxまたはWindowsで実行するためのフロントエンド(IDE)として優れたツールはありますか? 編集:私はCコンパイラを意味します。C ++はまだあまり良くありません。

3
ファイルの最初に、最後だけ知っているものを書き込む
背景: EBMLファイルを書き込むマイクロコントローラーCコードを書いています。EBMLは要素がネストされたバイナリXMLに似ていますが、開始タグと終了タグの代わりに、開始ID、長さ、そしてデータがあります。低電力アプリケーションの外部フラッシュにこれを書き込んでいるので、フラッシュアクセスを最小限に抑えたいと思います。決して簡単なことはないので、メモリも制限されます。 EBML要素全体をメモリに保持できる場合、その長さがわかったら、各要素の長さに戻って入力できるため、生成は簡単です。問題は、要素全体をメモリに保持できない場合の対処方法です。私が見るオプションは: 私が知っていることを書いてから、戻って長さを追加します(最も簡単ですが、必要以上にフラッシュアクセスを追加します) 書き始める前に各要素の長さを計算します(比較的簡単ですが、プロセッサ時間は長くなります) メモリがいっぱいになったらモードを切り替えて、データを調べ続けますが、すでにメモリに予約されている要素の長さを計算するだけです。次に、メモリにあるものを書き込み、戻って、中断したところからデータの処理を続けます。(これまでのところ私のお気に入りのオプション) 要素を書き込む必要があり、最終的な長さがまだわからない場合は、要素に最大または最悪の場合の長さを指定します。(上記より簡単ですが、裏目に出てスペースを無駄にする可能性があります) 質問:これは、人々が考えていた比較的一般的な問題であるように思われます。一部のデータパケットを形成するときにも発生する可能性があることを知っています。私がここで見逃している/より一般的/より受け入れられたより良いテクニックはありますか?または、私が検索できる問題のいくつかの用語?

1
CでのC ++テンプレートタイプAPIの慣用的なラッピング
C関数でデータストア(Hazelcast)へのアクセスを提供するC ++ APIのラップに取り組んでいるため、データストアはCのみのコードからもアクセスできます。 Mapデータ構造用のHazelcast C ++ APIは次のようになります。 auto map = hazelcastClient->client->getMap<int, string>(mapName); map.put(key, value); とテンプレートのテンプレートタイプを使用keyしvalueます。Cには利用可能なテンプレートがないため、getMap<T, U>メソッドの特殊化ごとにラッパー関数を作成することを考えました。つまり、Cタイプごとに。私があることを承知しているが、signedおよびunsignedCタイプのバージョンは、私だけをサポートするAPIを制限して大丈夫だよint、double、float、char *のためにkeyとvalue。 そこで、すべての組み合わせを自動生成する小さなスクリプトを書きました。エクスポートされた関数は次のようになります。 int Hazelcast_Map_put_int_string( Hazelcast_Client_t *hazelcastClient, const char *mapName, int key, char *value, char** errptr ); int Hazelcast_Map_put_int_int( Hazelcast_Client_t *hazelcastClient, const char *mapName, int key, int value, char** errptr ); ... 機能の生成get、set、containsすべての可能な組み合わせとkeyし、value種類は非常に多くのコードの量を増加させ、そして、私はコードを生成することは良いアイデアだと思いますが、それはコード生成インフラのいくつかの種類を作成することによって、追加の複雑さを追加します。 私が想像できるもう1つのアイデアは、次のようなCの一般的な関数の1つです。 int …
9 c++  c  api-design 

1
銀行は実際にお金のデータ型として何を使用していますか?[閉まっている]
休業。この質問には、より焦点を当てる必要があります。現在、回答を受け付けていません。 この質問を改善してみませんか?質問を更新して、この投稿を編集するだけで1つの問題に焦点を当てます。 4年前休業。 私はいくつかの良いオプションを知っています: セントまたは10 -nセントを表す大きな整数(int64_t、mpz_t、任意のbignum libなど)-たとえば、整数はペニーの1/100を表します($ 1.05 == 10500)。これは、スケーリングされた整数と呼ばれます。 JavaのBigDecimal、PythonのDecimal、JavaScriptのdecimal.js、C ++のboost :: multiprecision などの任意精度の10進数演算用の高レベルライブラリ 文字列。 パックBCD(2進化10進数)は、より難解な方法で、古いソフトウェアでは一般的でした。それについてもっと読んでください 。 銀行(またはクレジットカード、ATM、POSシステム)の量産コードで、実際に最も使用されているデータタイプはどれですか。特に銀行に勤めた方にお願いします。 編集:同じ問題ドメインを持つ人々にとって非常に便利なリンク(壊れない「お金」のデータ構造を実装する必要がある)。 http://martinfowler.com/eaaDev/quantity.html http://www.codeproject.com/Articles/28244/A-Money-type-for-the-CLR http://c2.com/cgi/wiki?MoneyObject http://www.setfiremedia.com/blog/7-top-tips-for-coding-with-currency http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html これは重複する質問であると言ったフェローのためのEDIT:これは、「何が最良か」の理論的な質問ではなく、実際的な質問です。私の質問の未編集のタイトルを読んでください。銀行のコードベースで人々が直接目にしたものを尋ねています。 BigDecimalが「最高」であることは明らかですが、そのような素晴らしいAPIはどこでも利用できるわけではなく、信じられないかもしれません。また、10進数ライブラリはintとは対照的に高価です。

3
Cの変数の「真の」サイジングはどの程度役に立ちますか?
Cのポジティブな機能(実際にはgcc、clangなどの実装の機能)として常に直感的に私を驚かせた1つのことは、実行時に独自の変数の隣に隠された情報を格納しないという事実です。つまり、たとえば「uint16_t」タイプの変数「x」が必要な場合、「x」が2バイトのスペースしか占有しないことを確認できます(そのタイプなどの非表示の情報は含まれません)。 。)。同様に、100個の整数の配列が必要な場合は、100個の整数と同じ大きさであることを確認できます。 しかし、より多くの私はそれが実際に持っている場合はより多くの私は疑問に思って、この機能のための具体的なユースケースを思い付くしようとしています任意のすべての実用的な利点を。私がこれまでに思いつくことができる唯一のことは明らかにそれがより少ないRAMを必要とするということです。AVRチップなどの限られた環境では、これは間違いなく大きなプラスですが、日常のデスクトップ/サーバーのユースケースでは、それはかなり無関係であるようです。私が考えている別の可能性は、ハードウェアへのアクセス、またはメモリ領域のマッピング(たとえば、VGA出力など)に役立つ/重要である可能性があることです... ... 私の質問:この機能なしでは実装できないか、非常に煩雑にしか実装できない具体的なドメインはありますか? PSより良い名前があるかどうか教えてください!;)

5
揮発性変数を宣言するとはどういう意味ですか?
多くの低レベルのプログラムは、しかし、私は一種のそれは何にとして困惑している、メモリマッピングなどのための種類の揮発性のキーワードを使用REALLYバックグラウンドで行います。つまり、コンパイラがメモリアドレスを「最適化しない」とはどういう意味ですか?
9 c++  c  low-level 

8
Cがコンパイル/解釈/ JITされるのを妨げる原因は何ですか?
Javaは、その驚くべき移植性でしばしば賞賛されています。これは、JVMが原因だと思います。私の質問は、Cがコンパイル/解釈/ JITされるのを阻止するものです。もしそうなら、Cは1度だけ記述して、あなたが持っているどのデバイスでも動作させることができます。しかし、これはCプログラムを処理するための一般的なメカニズムではありません。 もちろん、このようにCを処理することの欠点は何ですか?もちろん移植性以外に、このようにJavaを処理してマシンコードにコンパイルしないことの利点は何ですか?

4
Cで「デストラクタ」を省略すると、YAGNIが過度に影響を受けますか?
私はOOのようなテクニックを使用して、Cで中程度の組み込みアプリケーションに取り組んでいます。私の「クラス」は.h / .cモジュールであり、データ構造体と関数ポインタ構造体を使用して、カプセル化、ポリモーフィズム、および依存性注入をエミュレートします。 これで、myModule_create(void)関数にmyModule_destroy(pointer)対応する関数が付属することが期待されます。しかし、プロジェクトが埋め込まれている場合、現実的にインスタンス化されたリソースは決して解放されるべきではありません。 つまり、4つのUARTシリアルポートがあり、必要なピンと設定を使用して4つのUARTインスタンスを作成する場合、ランタイム中のある時点でUART#2を破棄する必要はまったくありません。 YAGNI(あなたはそれを必要としないでしょう)の原則に従って、私はデストラクタを省略すべきですか?これは私には非常に奇妙に思えますが、それらの使用法を考えることはできません。デバイスの電源がオフになると、リソースは解放されます。

5
関数が外部からアクセスされていることを明確にする方法は?
これはC固有の質問です。私は可能な限りすべてを翻訳単位の境界内に保ち、.hファイルを介していくつかの関数のみを公開することを試みています。つまり、staticファイルレベルのオブジェクトへのリンクを提供しています。 ここで、いくつかの関数を他のモジュールから呼び出す必要がありますが、直接呼び出す必要はありません。私のモジュール/ファイル/翻訳ユニットは他のモジュールにサブスクライブし、関数へのポインターを渡します。次に、特定のイベントが発生すると、いくつかの引数を指定してポインターが呼び出されます。 したがって、これらの関数があいまいな場所から呼び出されていることを非常に明確にする方法を知りたいと思います。 彼らは、あるべきstaticかextern(及び、それらを公開しますか.h)? 関数の名前にいくつかのヒントを含める必要がありますか? それとも、「Xから呼び出されました」というコメントで十分ですか?

2
C標準がconst-nessを再帰的に考慮する理由は何ですか?
C99標準は6.5.16:2で次のように述べています。 代入演算子は、左オペランドとして変更可能な左辺値を持つものとします。 6.3.2.1:1では: 変更可能な左辺値は、配列型がなく、不完全型がなく、const修飾型がなく、構造体または共用体である場合、メンバー(再帰的に、任意のメンバーを含む)がない左辺値ですまたは含まれるすべての集合体または共用体の要素)、const修飾型。 ではconst struct、constフィールドのないものを考えてみましょう。 typedef struct S_s { const int _a; } S_t; 標準では、次のコードは未定義の動作(UB)です。 S_t s1; S_t s2 = { ._a = 2 }; s1 = s2; これに関する意味上の問題structは、エンティティの宣言されたタイプ(S_t s1)から判断すると、囲んでいるエンティティ()は書き込み可能(読み取り専用ではない)と見なされるべきですが、標準の文言(2つの条項)によって書き込み可能と見なされるべきではありません。上部)constフィールドのため_a。規格では、割り当てを実際にUBであるとコードを読んでいるプログラマーに不明確にしていますstruct S_s ... S_t。これは、型の定義がないことを伝えることができないためです。 さらに、フィールドへの読み取り専用アクセスは、とにかく構文的にのみ適用されます。constnon-の一部のフィールドをconst struct実際に読み取り専用ストレージに配置する方法はありません。しかし、このような標準の表現はconst、これらのフィールドのアクセサープロシージャのフィールドの修飾子を故意にキャストするコードを非合法化します(Cの構造体のフィールドをconst修飾することは良い考えですか?): (*) #include <stdlib.h> #include <stdio.h> typedef struct S_s { const int _a; } S_t; …
9 design  c 

1
ヘッダーのマクロ関数と静的関数
関数を使用できる多くの簡単なタスクでf(x,y)は、プレーンCではマクロが使用されます。関数呼び出し(つまり、任意のコードのコード拡張ではなく、関数のインライン化に使用されるマクロ)で解決できるこれらのケースについて具体的に尋ねたいと思います。 他のCファイルからリンクされている可能性があるため、通常、C関数はインライン化されません。ただし、静的C関数は、それらが定義されているCファイル内からのみ表示されます。したがって、コンパイラーによってインライン化できます。多くのマクロは、より安全なコードを生成するため、静的関数に変換することで置き換える必要があると聞きました。 これが良くないケースはありますか? 繰り返しますが、##と同様に、関数としてまったく表現できない構造を持つコード生成マクロについては尋ねません。
9 c 

6
私のチームは、独自の基準として、よく評価されている一般的なコーディング標準を使用する必要がありますか?
私が参加しているR&Dチームは、コーディング標準を採用することを決定しました。私たちが最近結成したばかりであり、コードと共通のコーディング時間が少なすぎて、チームで有機的に開発されたもの、および独自のコードからの良い例などに基づいて標準/規約のドキュメントを作成できません。 今、私たち一人ひとりが過去の職場での経験を持っていますが、「ここで行うこの種の仕事にふさわしいことがわかった、この包括的なドキュメントをここで採用しましょう」と言っている人はいません(*)。さらに、一部の私(自分自身を含む)は、公式のコーディング標準がない場所、または別の設定で別の言語で作成した経験のみを持っています(より研究指向の開発作業ではなく、週ごとの高圧の本番環境)。 したがって、私が考えていたオプションの1つは、比較的よく知られていて評判の高いドキュメントを取り上げ、私たちが気にしていない/気にしていないものを切り取り、好みに基づいていくつかの変更を加えることです。 これは一般的な方法ですか?これは良いアイデアだと思いますか?もしそうなら、合理的な「ベースライン」コーディング標準とは何でしょうか(どちらが最善か教えてください、ここで宗教的対立を始めたくありません。包括的または「中立」に基づいて構築できるものを指摘してください) 。) ノート: C、C ++、OpenCL、CUDA、Pythonで動作することを期待しています。 私たちは4人のチームとマネージャーのチームで、1年程度で5〜6人に成長すると予想されています。 私たちの会社では、チームはほぼ完全に自律的であり、通常はまったく相互作用しません(お互いのコードを使用することによってさえも-作業は完全に異なるプロジェクトにあります)。そう-全社的な考慮事項はありません。 ツールに関しては、現時点ではEclipseを使用することがわかっているため、そのコードフォーマッターは少なくとも1つのツールになります。Ctrl + Shift + Fは長い間私の友人です 私がJavaを書くとき、私はBlochの効果的なJavaにできる限り厳密に従うことを採用しました。さて、それは完全なコーディング標準ではありませんが、コーディング標準のレンガ、セメント、モルタルを呼び出すことができます。そのようなものを「ミックス」の一部として含めることを考えていました(Javaは実行しないことに注意してください)。 より広い意味でのコーディング標準を意味します。たとえば、このP.SEの質問に対する回答で行われた提案を採用します。 C ++コーディング標準ドキュメントの大きなリストを見つけました。多分私は私たちのベースラインを採掘するべきです。 (*)それはまったく真実ではありませんが、私はこの質問をあまりにも多くの詳細で複雑にしたくありません。

3
Cライブラリ関数の背後にある根拠がerrnoをゼロに設定しない
C標準では、C標準ライブラリ関数errnoをゼロに設定しないことを義務付けています。なぜこれが正確なのですか? 私はそれがいくつかの関数を呼び出しerrno、最後の関数の後でのみチェックするのに役立つことを理解できました-例えば: errno = 0; double x = strtod(str1, NULL); long y = strtol(str2, NULL); if (errno) // either "strtod" or "strtol" failed else // both succeeded しかし、これは「悪い習慣」とは見なされていませんか?あなただけチェックしているので、errno非常に最後に、あなただけの機能の一つであることを知ったの失敗ではなく、どの関数が失敗しました。何かがほとんどの実用的なプログラムに対して十分に失敗したことを単に知っていますか? さまざまなC Rationaleドキュメントを探してみましたが、それらの多くにはの詳細があまりありません<errno.h>。
9 c  standards 

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