タグ付けされた質問 「kernighan-and-ritchie」

1
「Cプログラミング言語」の本でmallocをキャストする必要があると書かれているのはなぜですか?
今日、私は、ページに達する167の言語(第二版ブライアンW.カーニハン&デニスM. Ritchie氏を)プログラミングCをし、著者は、私はキャストしなければならないと言うことがわかりましたmalloc。これは本の一部です: 7.8.5ストレージ管理 関数mallocおよびcallocは、メモリのブロックを動的に取得します。 void *malloc(size_t n) 初期化されていないストレージのnバイトへのポインタを返します。要求が満たされない場合はNULLを返します。 void *calloc(size_t n, size_t size) 指定されたサイズのn個のオブジェクトの配列に十分な空き領域へのポインタを返します。要求が満たされない場合はNULLを返します。ストレージはゼロに初期化されます。mallocまたはcallocによって返されたポインターは、問題のオブジェクトに対して適切な配置になっていますが、次のように適切な型にキャストする必要があります int *ip; ip = (int *) calloc(n, sizeof(int)); 私はすでにそれを知っているmalloc(とその家族)戻り型void *型を、そしてなぜキャストへの良好な説明がありますmalloc。 しかし、私の質問は次のとおりです。なぜこの本は私がそれをキャストするべきだと言っているのですか?

13
##プリプロセッサオペレーターと考慮すべき問題のアプリケーションは何ですか?
以前の質問の多くで述べたように、私はK&Rを通じて作業しており、現在プリプロセッサーに取り組んでいます。さらに興味深いことの1つは、これまでCを学ぼうとした試みのどれからもこれまで私が知らなかったものですが、##プリプロセッサーオペレーターです。K&Rによると: プリプロセッサー演算子## は、マクロ展開中に実際の引数を連結する方法を提供します。置換テキストのパラメーターがに隣接している##場合、パラメーターは実際の引数に置き換えられ、 ##および周囲の空白が削除され、結果が再スキャンされます。たとえば、マクロpaste は2つの引数を連結します。 #define paste(front, back) front ## back そのpaste(name, 1)トークンを作成します name1。 現実世界でこれをどのように、そしてなぜ使用するのでしょうか?その実際の使用例は何ですか?考慮すべき落とし穴はありますか?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.