問題タブ [c89]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - 推奨されるClangコマンドラインオプション
Clangのマニュアルは進行中のようですが、ANSI-C(AKA C89、C90)を最大限の厳密さと関連性のある/役立つ警告でコンパイルするための決定的なコマンドラインオプションを作成するのを手伝ってもらえますか?
Clangは、C、C ++、およびObjective-Cプログラミング言語用のコンパイラフロントエンドです。バックエンドとして低レベル仮想マシン(LLVM)を使用します。それはまだ開発中です。その目標は、GNUコンパイラコレクション(GCC)に代わるものを提供することです。
c - 定義の関数見出しの後のC変数宣言
FreeBSDのソースコードを読んでいると( radix.hの158〜173行目を参照)、定義の「関数の見出し」に続く変数宣言を見つけました。
これはISOC(C99)で有効ですか?これは、「関数の見出し」内で変数を宣言するだけでなく、本番コードでいつ実行する必要がありますか?なぜここで行われているのですか?
次のような文字列の見出しの関数を参照します。int someFunction(int i, int b) {
c - MS VS 2008 および C99
「C99はどのくらい普遍的にサポートされていますか?」という投稿を興味深く読みました。その中のコメントの 1 つは、Microsoft が C99 をサポートしていないことを指摘しています。ただし、コメント記号 // は VS 2008 で機能し、この記号は C99 にあります。2 つの質問があります。
VS 2008 は C99 をどの程度サポートしていますか?
同じコードで C89 と C99 の構文を混在させても問題ありませんか? したがって、C89 でコードを記述し、コメント //. これは、混合コーディングを行っていることを意味します。では、そのような場合、コンパイラは何をしますか? 最初に c89 でコードをチェックし、次に C99 でコードをチェックして、コメントに // を使用していることを受け入れますか?
gcc - GCCを使用して自立型環境用にコンパイルするにはどうすればよいですか?
私が取り組んでいるコードは、ホスト環境と自立環境の両方でビルドできるはずであり、後者の場合のいくつかのstdlib関数のプライベート実装を提供します。
通常のワークステーション/ビルドサーバーでGCCだけでこれを確実にテストできますか?GCCを使用して自立環境用にコンパイルする
「-ffreestanding」オプションは有望に見えましたが、組み込みを無効にし、STDC_HOSTEDマクロを適切に設定する「のみ」のようですが、それでもすべてのシステムヘッダーを提供します。
オプション「-nostdinc」は制限が厳しすぎます。自立型の実装に必要なヘッダー(特にstddef.hとlimits.h)を引き続き使用したいと思います。
ここで何が欠けていますか?
ああ、私は今のところGCC 4.4.3を使用していますが、「すぐに」4.5.0にアップグレードします。
c - 混合宣言とコード
「gcc-odene-Wall -ansi -pedantic-errors dene.c」を使用して関数をコンパイルすると、gccはエラーを出力しません(char ....で始まる行をifループで確認できますか?)
ただし、上記の関数をgccで再フォーマットすると、gccはそのエラーを発行します。
「dene.c:10:エラー:ISOC90は宣言とコードの混合を禁止しています」
そして最後の1つ、gccは次のエラーを発行します
dene.c:16:エラー:「char」の前に式が必要です</ p>
dene.c:20:エラー:'p1'が宣言されていません(この関数での最初の使用)
dene.c:20:エラー:(宣言されていない各識別子は1回だけ報告されます
dene.c:20:エラー:表示される関数ごとに。)
問題は、なぜそれらの間に違いがあるのかということです。
c - 多次元配列をCで別の配列にコピーする際の構文エラー
2つのIR距離センサーを備えたST269マイクロコントローラーをプログラミングしています。これらのセンサーを較正するために、測定した距離とADCから取得した対応する値を使用して、センサーごとに1つのテーブルを作成しました。
ここで、1つの関数を使用して、その間の値を概算します。そこで、2つの2次元配列(センサーごとに1つ)をグローバル変数として定義しました。次に、関数で、操作する1つの配列を作業配列にコピーし、値を概算します。
コードは次のとおりです。
このコードはsensor.cというファイルにあります。私たちはsensor.hにグローバルアレイについて何も書きませんでしたか?もちろん、sensor.hはmain.cに含まれており、そこで関数が呼び出されます。
また、を介してアレイをコピーしようとしました
memcpy(working_array、ir_werte_li、sizeof(working_array));
そして、あらゆる方法でこれを行うと、
私たちが宣言している行で
そして、私はこの行に構文エラーがないことをかなり確信しています:)
私が最後にCでコーディングをするのは数年先なので、これを行う方法が良いかどうかはわかりません。おそらく、配列などを実際にコピーする代わりに、ポインタを使用することでこれを解決できます。だから私を助けてください私はこれについてあなたのビットに感謝します。
linux - makeを使用してC99としてコンパイルする方法は?
Makefileを使用してLinuxカーネルモジュールをコンパイルしようとしています。
それは私に与えます:
C99に切り替える必要があります。読んだ後、フラグ-std = c99を追加する必要があることに気付きましたが、どこに追加するのかわかりません。
Makefileを変更してC99としてコンパイルするにはどうすればよいですか?
c - gccでC89スタイルの変数宣言を強制するには?
ほとんどが C++ で構成され、ほとんどが gcc でビルドされているコード ベースで作業していますが、MSVC でビルドする必要がある場合もあります。Microsoft の C コンパイラは、いくつかのマイナーな拡張機能を備えたほとんどの C89 のままであり、C++/C99 風の混合コードと変数定義をまだサポートしていません。そのため、開発者が gcc で作業しているときに順不同のコード/変数定義を記述しないようにする方法を見つける必要があります。そうしないと、ビルドが後で MSVC で壊れます。私が使用するgcc -std=c89
と、C++ スタイルのコメントが許可されていないため、すべてが壊れます (他の問題もあるかもしれませんが、これ以上調べていません)。使用するgcc -std=gnu89
と、順不同のコード/変数定義が許可されるため、それも役に立ちません。何か案は ?私はちょうどのようなものが必要だと思いますgcc -std=c99 -fno-inline-variable-definitions
、そのようなオプションが存在する場合。
c - ネットワーク C コードでのデータ破損
私はWindowsとANSI-cを使用しています。ネットワークカードからデータを盗聴し、それをデコードしてUDP経由で他のアプリケーションに送信するアプリケーションがあります。問題は、私のアプリケーションが正常に動作することから始まりますが、しばらくするとすべての変数 int、float、および文字列が破損し、何度もチェックしましたが、問題を掘り下げることができません。このアプリケーションは、ネットワークからデータを傍受せずに自分の IP にデータを直接送信すると、非常にうまく機能します。
この問題に取り組む方法、テストツール、または役立つ他の方法を誰かに提案してもらえますか?