我正在尝试使用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和free。
发生了什么事?对不起,如果这很简单,我是C和C ++的新手
答案 0 :(得分:20)
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”命令查找要包含在其他功能中的头文件。
答案 1 :(得分:5)
在使用这些函数之前,您应该包含提供其原型的头文件。
对于malloc&amp;免费是:
#include <stdlib.h>
对于strlen和memcpy来说是:
#include <string.h>
你还提到了C ++。这些函数来自C标准库。要从C ++代码中使用它们,include行将是:
#include <cstdlib>
#include <cstring>
但是,您可能在C ++中做的事情不同,而不是使用它们。