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

Cは、システムプログラミング(OSおよび組み込み)、ライブラリ、ゲーム、クロスプラットフォームに使用される汎用プログラミング言語です。このタグは、ISO 9899標準で定義されているC言語に関する一般的な質問で使用する必要があります(特に指定のない限り、最新バージョン9899:2018。バージョン固有のリクエストには、c89、c99、c11などのタグも付けます)。CはC ++とは異なり、合理的な理由がない限り、C ++タグと組み合わせるべきではありません。

3
clangを検出するためにどの事前定義マクロを使用できますか?
ソースコードのコンパイルに使用されたコンパイラを検出しようとしています。MSVCまたはGCCをチェックするための定義済みマクロを簡単に見つけることができますが(たとえば、http://predef.sourceforge.net/を参照)、clangをチェックするためのマクロを見つけることができません。 __CLANG__私のコードを現在コンパイルしているものを知るためにclangがマクロを定義しているかどうか誰かが知っていますか?


8
なぜc = ++(a + b)はコンパイルエラーを起こすのですか?
調査した後、インクリメント演算子はオペランドに変更可能なデータオブジェクトが必要であることを読みました:https : //en.wikipedia.org/wiki/Increment_and_decrement_operators。 このことから、(a+b)は一時的な整数であり、変更できないため、コンパイルエラーが発生すると思います。 この理解は正しいですか?問題を調査しようとしたのはこれが初めてだったので、何か問題があった場合は、アドバイスしてください。
111 c  increment 

20
古いデスクトップコンピュータで小さなオペレーティングシステムを構築するにはどうすればよいですか?[閉まっている]
休業。この質問には、より焦点を当てる必要があります。現在、回答を受け付けていません。 この質問を改善してみませんか?質問を更新して、この投稿を編集するだけで1つの問題に焦点を当てます。 4年前休業。 この質問を改善する オペレーティングシステムの記述が(特に自分で)耐えられないほど複雑であることを知っているので、これは無駄かもしれません。 次のLinuxまたはWindowsをビルドする予定はありません。 私はそれが恐ろしくてバグがあり、うまくいかないことを知っています、しかしそれは大丈夫です。 Assembly、C、および(一部の)C ++で自分ですべてを書きたいと思います。 現時点では他のことで忙しくてすぐに時間がないので、これは将来のプロジェクトですが、今すぐ質問するつもりだったので、これについて多くの答えを得ることができ、ビルドして、この種のアプローチの有用なリソースになる(私が見た他のすべては、minixからのビルド、既存のブートローダーの使用、仮想ブートプログラムでのビルドなど)。 モニター、キーボード、マウスを備えた古いデスクトップの1つをセットアップし、空のハードドライブで作業を開始したいと考えています。 独自のブートローダーの記述方法を学びたい(これについては多くのリソースを見つけたが、完全を期すために、いくつかの良いものを追加してください)、独自のUSBドライバー(必要な場合)、CDドライバー(必要な場合) )などすべて、ゼロから。 コードをコンピューターに配置するにはどうすればよいですか?フロッピーディスクで行うのが最善ですか。ほとんどのコンピューターはUSBスティックからそれを行うことができますか? どのようなドライバーが必要ですか?それらを構築するための参照を提案できますか? 起動シーケンスの後-それから何ですか?プロテクトモードにするにはどうすればよいですか。 オペレーティングシステムを使用せずにメモリを管理するにはどうすればよいですか?必要なアドレスだけを使用しますか?初期化は必要ありませんか? 私は間違いなく何に遭遇しますか? コマンドラインO / SとグラフィカルなO / Sのどちらにすることができますか? グラフィカルO / Sとは何ですか?たとえば、コマンドライン、フォント、画像を上に配置するにはどうすればよいでしょうか。 マルチタスク環境のセットアップについてどこで読むことができますか?(つまり、2つのグラフィックのようなコマンドラインを並べて実行します)。 ある種のウィンドウシステムをどのように設定しますか?単純なマルチタスクが設定された後、画面にグラフィックスを表示するにはどうすればよいですか? 私を信じて、私はこれが非常に複雑なプロジェクトであることを理解し、私はおそらくそれを完了したり、それについて何かを書いたりすることは決してないでしょう。 これには、私が言及しなかった他の多くの部分があります。何か考えたら、それらも追加してください。 回答ごとに1つの「トピック」を入力してください。たとえば、USBドライバー、リソースのリスト、注意事項などです。 また、別のO / Sまたは既存のコードから構築することはお勧めしません。多くの既存のコード(Linuxカーネル、サンプルリソース、既存のドライバなど)を読み取ることはわかっていますが、最終的にはすべて自分で記述したいと思っています。私は他の何かから構築する必要があることを知っています。SOには他にも多くの質問があり、気が変わってそのルートに進んだ場合に読むことができます。しかし、これはすべてをゼロから行うことに関するものです。 それをグラフィカルにする方法について何か提案はありますか?さまざまなビデオモードとその操作方法など

8
一般的なデータ構造を持つオープンソースのCライブラリはありますか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。私たちは回答が事実、参考文献、専門知識によってサポートされることを期待しますが、この質問はおそらく議論、議論、投票、または拡張された議論を誘います。この質問が改善され、場合によっては再開できると思われる場合は、ヘルプセンターにアクセスしてください。 7年前休業。 リンクリスト、ハッシュテーブルなどの一般的な再利用可能なデータ構造を備えたCライブラリを探しています。KyleLoudonによるC(ペーパーバック)のマスタリングアルゴリズムで配布されたソースのようなもの。
111 c  data-structures 

13
Cのインタープリターはありますか?[閉まっている]
閉まっている。この質問はスタックオーバーフローのガイドラインを満たしていません。現在、回答を受け付けていません。 この質問を改善してみませんか?Stack Overflowのトピックとなるように質問を更新します。 2年前休業。 ロックされています。質問はトピックから外れていますが、歴史的に重要であるため、この質問とその回答はロックされています。現在、新しい回答や相互作用を受け入れていません。 Cのインタープリターのようなものがあるかどうか疑問に思っていました。つまり、Linux端末で「python」と入力して、そのインタープリターでコードを記述できます。(私は正しい言葉を解釈するかわかりません)。これは、さまざまなことをテストするのに非常に役立ちます。Cにも同​​様のものが存在するかどうか知りたいです。私がそれを行うことができると思うことができる唯一のことは、Cシェルでしょう...

8
「struct hack」は技術的に未定義の動作ですか?
私が尋ねているのは、よく知られている「構造体の最後のメンバーは可変長です」というトリックです。それはこのようなものになります: struct T { int len; char s[1]; }; struct T *p = malloc(sizeof(struct T) + 100); p->len = 100; strcpy(p->s, "hello world"); 構造体がメモリに配置される方法により、必要なブロックよりも大きい構造体に構造体をオーバーレイし、最後のメンバーを1 char指定されたものよりも大きいかのように扱うことができます。 だから問題は:この技術は技術的に未定義の動作ですか?。私はそれがそうであると期待しますが、標準がこれについて何を言っているのか興味がありました。 PS:私はこれに対するC99のアプローチを知っています。具体的には、上記のトリックのバージョンに忠実に答えてほしいと思います。




3
二次元配列を割り当てる奇抜な方法?
プロジェクトでは、誰かがこの行をプッシュしました: double (*e)[n+1] = malloc((n+1) * sizeof(*e)); これはおそらく(n + 1)*(n + 1)doubleの2次元配列を作成します。 おそらく、これまでのところ、これが何をするのか、正確には、どこから来たのか、なぜ機能するのかを教えてくれなかったので、私は尋ねました。 多分私は明白な何かを見逃しているかもしれませんが、誰かが私に上記の行を説明していただければ幸いです。個人的には、私たちが実際に理解しているものを使ったほうがずっと気持ちがいいからです。

3
コメントのみが変更されたプログラムの2つのバイナリがgccで正確に一致しないのはなぜですか?
2つのCプログラムを作成しました プログラム1 int main() { } プログラム2 int main() { //Some Harmless comments } 私の知る限り、コンパイルするとき、コンパイラ(gcc)はコメントと冗長な空白を無視する必要があるため、出力は類似している必要があります。 しかし、出力バイナリのmd5sumsを確認したところ、一致していません。また、最適化-O3を使用してコンパイルしようとしました-Ofastが、それでも一致しませんでした。 ここで何が起きてるの? 編集:正確なコマンドとそこにあるmd5sumsがあります(t1.cはプログラム1であり、t2.cはプログラム2です) gcc ./t1.c -o aaa gcc ./t2.c -o bbb 98c1a86e593fd0181383662e68bac22f aaa c10293cbe6031b13dc6244d01b4d2793 bbb gcc ./t2.c -Ofast -o bbb gcc ./t1.c -Ofast -o aaa 2f65a6d5bc9bf1351bdd6919a766fa10 aaa c0bee139c47183ce62e10c3dbc13c614 bbb gcc ./t1.c -O3 -o aaa gcc …

30
C / C ++でバイトのビットの順序を逆にする最も簡単な方法は何ですか?
バイトのビット順序を逆にする方法は複数ありますが、開発者が実装するのに「最も簡単」なものは何なのか、私は知りたいです。そして、逆に言うと、 1110 -> 0111 0010 -> 0100 これは、この PHPの質問と似ていますが、重複していません。 これは、この Cの質問と似ていますが、重複していません。この質問は、開発者が実装する最も簡単な方法を求めています。「最適なアルゴリズム」は、メモリとCPUのパフォーマンスに関係しています。
110 c++  c  bit-manipulation 

10
C / C ++行番号
デバッグのために、C / C ++コンパイラで行番号を取得できますか?(特定のコンパイラの標準的な方法または特定の方法) 例えば if(!Logical) printf("Not logical value at line number %d \n",LineNumber); // How to get LineNumber without writing it by my hand?(dynamic compilation)

11
GCCとldで未使用のC / C ++シンボルを削除する方法は?
実行可能ファイルのサイズを大幅に最適化する必要があります(ARM開発)と、現在のビルドスキーム(gcc+ ld)で未使用のシンボルが削除されないことに気付きました。 arm-strip --strip-unneeded結果の実行可能ファイル/ライブラリのの使用は、実行可能ファイルの出力サイズを変更しません(私には理由がわかりません、たぶんそれができないのかもしれません)。 使用されていないシンボルが結果のファイルから削除されるように、ビルドパイプラインを変更する方法(存在する場合)は何ですか? 私もこれについては考えていませんが、現在の組み込み環境は非常に「強力」ではなく500K、2M結果を保存しても、ロードパフォーマンスが非常に向上します。 更新: 残念ながら、gcc私が使用する現在のバージョンには-dead-stripオプションがなく、-ffunction-sections... + --gc-sectionsfor を使用してもld、結果の出力に大きな違いはありません。 gcc + ld未使用のシンボルを自動的に取り除く必要があると確信していたので、これが問題になることにもショックを受けました(なぜそれらを保持する必要があるのですか?)。
110 c++  c  gcc  ld  strip 

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