ETAを渡す:これは、malloc関数()、またはメモリの割り当てに関するものではありませんように、それは、パラメータとしてタイプを渡すことについてです簡単な例。をパラメータとしてタイプ
これは愚かな質問かもしれません、またはおそらく私は何かが不足しています。
いくつかのメモリを割り当てる単純な関数を書きたいとしましょう。特定の種類のメモリではなく、より柔軟なものを割り当てることを考えてみましょう。
同様に、1,000個の文字が割り当てられて返されたかったとします。だから私はこのように呼び出すことができる関数をしたいと思います:
ptr = getMem(char, 1000);
実際の型をパラメータとして使用すると便利です。
は今、私はのva_argのようなマクロは()これを行うことができます知っている:
fprintf(stdout, "%s\n", va_arg(l, char));
だから私はそれがすべてかなり曖昧だし、そこに少し見えました。私はこれを見つけた:
type va_arg(va_list ap, type)
パラメータ
ap − This is the object of type va_list with information about the additional arguments and their retrieval state. This object should be initialized by an initial call to va_start before the first call to va_arg.
type − This is a type name. This type name is used as the type of the expression, this macro expands to.
あなたが最初のパラメータのタイプはva_list
、 が、2番目のパラメータとして定義されているクリアリー見ることができ、私が興味を持っています1 in - は単にtype
と指定されています。
だから、それはバグに私を始め、私はこのようなお尻のコードをいじりてきた:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void *getMem(type, int size) {
return malloc(sizeof(type) * size);
}
int main(void)
{
void *mem;
mem = getMem(1000, char);
if (mem == NULL) {
perror("malloc()");
exit(EXIT_FAILURE);
}
fprintf(stdout, "Memory allocated successfully!\n");
free(mem);
exit(EXIT_SUCCESS);
}
私の周りスニッフィングしてきたこれを理解しようとしているファイルを含むが、無駄に、そこにあります私はこれを行うことができますか?
申し訳ありませんが少し曖昧または無意味ですが、もしva_arg()がそれを行うことができれば、私もできるはずです。
多くの義務があります。
プリプロセッサマクロを使用する必要があります。例えば、 '#define getMem(type、size)malloc((size)* sizeof(type))' –
あなたの意見は分かりましたが、私はそれのためのより多くの使用があると確信しています。 – Nunchy
"ある種類のメモリではなく、もっと柔軟なものを割り当てる単純な関数を書くとしましょう。" - あなたは 'malloc'のようなものを意味しますか? – Olaf