問題タブ [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 - ANSIC90でランタイムエラーをキャッチするにはどうすればよいですか
ライブラリ関数ConnectToTCPServerを使用しています。この関数は、ホストに到達できない場合にタイムアウトします。その場合、アプリケーションは次のエラーでクラッシュします: "NON-FATAL RUN-TIME ERROR:" MyClient.c "、line 93、col 15、thread id 0x000017F0:Library function error(return value == -11 [0xfffffff5]) 。タイムアウトエラー」
エラーコード11はタイムアウトエラーであるため、これは私のアプリケーションで非常に頻繁に発生する可能性がありますが、アプリケーションがクラッシュします。アプリケーションをクラッシュさせるのではなく、このエラーをキャッチしたいと思います。
Ansi C90でこのランタイムエラーをキャッチするにはどうすればよいですか?
編集:これが現在の使用のコードスニペットです:
と
Callbackfunctionが呼び出されることはありません。サーバーが実行されていないため、ConnectToTCPServerがタイムアウトします。コールバックが呼び出されているのではないかと思いますが、呼び出されることはありません。
編集2:コールバック関数は実際には呼び出されません。ConnectToTCPServerの戻り値には、同じエラー情報が含まれています。ConnectToTCPServerがこのエラーをスローするのはバグかもしれないと思います。私はそれをキャッチしてC90でビンに入れる必要があります。何か案は?
編集3:コールバック関数をテストしました。サーバーがオンラインであるというまれなケースで、コールバック関数が実際に呼び出されます。エラーが発生したときにコールバックが呼び出されないため、これは役に立ちません。
gcc-warning - C90コードのコンパイル中にgccコンパイラで「ISOC90は可変サイズ配列を禁止します」という警告が表示される
C90cコードをgccでコンパイルしています。ISO C90 forbids variable-size array
次のような宣言をしているときに警告が表示されます
int symbols[nc];
ここで、ncは整数であり、その値は入力ファイルから読み取られます。入力ファイルの値が変化しているため、一定の値を維持できません。どうすればそれを取り除くことができますか?この警告を解決する必要があるのでしょうか、それとも単に無視することができるのでしょうか。
前もって感謝します。
c - C90 で入力の書式設定 (先行ゼロと小数点以下の桁数の削除) を行いますか?
このプログラムでやりたいことは、任意の数値を入力して一度に文字を読み取ってから、それを使用できるように int にフォーマットすることです (printf フォーマットを使用したくない) また、私はこの割り当てには getchar と printf を使用できます。
サンプル入力: 0001234.5
edit望ましい出力: <1234>(5) 実際の出力: 0001234050
ひらめきの先端にいるような気がしますが、障害物にぶつかりました。助けてください。
*編集 目的の END 結果は、非 10 進数を <1234> で囲み、10 進数を角かっこ (5) で囲むことです。
c - 基本パラメーターを持つ strtod
不必要に車輪を再発明したくありませんが、strtod の機能を探していますが、基本パラメーター (2,8,10,16) を使用しています。(strtoul が基本パラメーターを許可することは知っていますが、戻り値の型 double を探しています)。正しい方向へのアドバイス/指針はありますか? ありがとう。
c - C90 など、現在のコンパイラの標準を見つける方法
私はLinuxマシンで作業しています。私が使用しているCコンパイラが続く標準を見つけるためのシステムコマンドはありますか?
c - C のどの部分が最も移植性が高いですか?
最近、Lua の共同作成者である Luiz H. de Figueredo と Roberto Ierusalimschy のインタビューを読み、Lua の設計と実装について説明しました。控えめに言っても非常に興味をそそられました。しかし、議論の一部で私の心に何かが浮かびました。Roberto は、Lua を「独立したアプリケーション」 (つまり、OS から何も使用しない純粋な ANSI C です) と述べました。Lua のコアは完全に移植可能であり、その純粋さのために多くの移植が可能であると述べました。より簡単に、これまで考えもしなかったプラットフォーム (ロボットや組み込みデバイスなど) にも対応できます。
今、これは私を不思議に思います。一般に、C は非常に移植性の高い言語です。では、C のどの部分 (つまり、標準ライブラリーの部分) が最も移植性が低いのでしょうか? また、ほとんどのプラットフォームで動作することが期待できるものは何ですか? 限られたデータ型のセットのみを使用する必要がありますか (例:short
と 多分を避けるfloat
)? とシステムFILE
はどうですか?そして?Lua はこれらすべてを回避しているようです。それは物事を極端にしていますか?それとも移植性の問題の根源ですか? これ以外に、コードの移植性を非常に高めるためにできることは何ですか?stdio
malloc
free
私がこのすべてを尋ねている理由は、私が現在純粋な C89 でアプリケーションを作成しているためであり、可能な限り移植可能であることが最適です。私はそれを実装する際に中間の道を喜んで取ります (移植性は十分ですが、すべてを最初から書かなければならないほどではありません)。
最後の注意として、この説明はすべて C89 のみに関連しています。
c - C90で可変サイズの配列を割り当てる方法は?
SYMBOL に変数サイズを割り当てる必要があります。
typedef int SYMBOL
私は次の方法で行いました
SYMBOL test[nc]
、 nc
これは整数です。しかし、これにより次の警告が表示されます。
ISO C90 forbids variable-size array
警告を受けずにそれを行うにはどうすればよいですか?
ありがとう、テトナ
c - C89標準でのM_PIの使用
私はCを使用していて、定数M_PI(3.14159 ...)にアクセスしようとしています。math.hヘッダーファイルをインポートしましたが、M_PI定数はまだ定義されていませんでした。StackOverflowで検索したところ#define _USE_MATH_DEFINES
、コードに追加する必要があることがわかりました(以下のサンプルコードを参照)。std=c89
これは通常のコンパイルでは正常に機能しますが、実行中の作業のフラグを使用してコンパイルできる必要があります。
C89コードからM_PIにアクセスするにはどうすればよいですか?
c - ANSI C では、一定時間後に各文字を同じ場所に印刷することはできませんか?
コンソールに出力する乱数を生成しようとしています。LinuxでCでプログラミングしています。各数字に対して 1 秒の時間間隔の後、すべての数字を 1 か所に出力したかったのです。「時間間隔」を停止するため
に使用しています。sleep()
試してみましたが\b
、\r
何も機能しません。たとえば
、これを実行したかっただけです:
c - MS Visual C ++でVLA(可変長配列)を有効にしますか?
VLA、C99で定義されている可変長配列、MS Visual C ++での使用を有効にするにはどうすればよいですか、それともまったく不可能ですか?
はい、C ++標準はC89に基づいており、VLAはC89標準では使用できないため、C ++では使用できないことを知っていますが、MSVC ++もCコンパイラであると想定されており、/を使用してオンに切り替えることができます。 TCコンパイラパラメータ(Compile as C Code (/TC)
)。ただし、これを行うとVLAが有効にならないようで、コンパイルプロセスは失敗し、C ++(Compile as C++ Code (/TP)
)と同じエラーが発生します。たぶん、MSVC ++ CコンパイラはC89にのみ準拠しているのでしょうか、それとも何か(特別な構造またはプラグマ/定義)が不足しているのでしょうか?
コードサンプル:
コンパイルエラー:
エラーC2057:予期される定数式
エラーC2466:定数サイズ0の配列を割り当てることができません
エラーC2133:'pc':不明なサイズ