8

私はXCodeを試し、他の人のWindowsコードをコンパイルしようとしています。

これがあります:

inline GMVariable(const char* a) {
    unsigned int len = strlen(a);
    char *data = (char*)(malloc(len+13));
    if(data==NULL) {
    }
    // Apparently the first two bytes are the code page (0xfde9 = UTF8)
    // and the next two bytes are the number of bytes per character (1).
    // But it also works if you just set it to 0, apparently.
    // This is little-endian, so the two first bytes actually go last.
    *(unsigned int*)(data) = 0x0001fde9;
    // This is the reference count. I just set it to a high value
    // so GM doesn't try to free the memory.
    *(unsigned int*)(data+4) = 1000;
    // Finally, the length of the string.
    *(unsigned int*)(data+8) = len;
    memcpy(data+12, a, len+1);
    type = 1;
    real = 0.0;
    string = data+12;
    padding = 0;
}

これはヘッダーファイルにあります。

それは私を呼びます

宣言されていない識別子「malloc」の使用

また、strlen、memcpy、および無料の場合もあります。

どうしたの?これが非常に単純な場合は申し訳ありませんが、私はCとC++を初めて使用します

4

2 に答える 2

21

XCodeは、mallocと呼ばれるものを使用していることを通知していますが、mallocが何であるかはわかりません。これを行う最良の方法は、コードに以下を追加することです。

#include <stdlib.h> // pulls in declaration of malloc, free
#include <string.h> // pulls in declaration for strlen.

CおよびC++では、#で始まる行はプリプロセッサへのコマンドです。この例では、コマンド#includeが別のファイルの完全な内容をプルします。stdlib.hの内容を自分で入力したかのようになります。#include行を右クリックして「定義に移動」を選択すると、XCodeはstdlib.hを開きます。stdlib.hを検索すると、次のことがわかります。

void    *malloc(size_t);

これは、mallocが単一のsize_t引数で呼び出すことができる関数であることをコンパイラーに通知します。

「man」コマンドを使用して、他の関数にインクルードするヘッダーファイルを見つけることができます。

于 2012-09-03T01:10:17.157 に答える
7

これらの関数を使用する前に、プロトタイプを提供するヘッダーファイルをインクルードする必要があります。

mallocと無料の場合:

#include <stdlib.h>

strlenとmemcpyの場合は次のとおりです。

#include <string.h>

また、C++についても言及しています。これらの関数は、C標準ライブラリからのものです。C ++コードからそれらを使用するには、インクルード行は次のようになります。

#include <cstdlib>
#include <cstring>

ただし、C ++では別の方法で処理を行っており、これらを使用していない可能性があります。

于 2012-09-03T01:09:26.210 に答える