使用new关键字的纯c
概述:使用new关键字的纯c,c,C,概述: #include <stdio.h> #include <stdlib.h> #include <strings.h> struct MyData_T { int MyInt; char MyName[512]; char *MyCharPtr; }; typedef struct MyData_T *MyData_P; MyData_P newData(char* AName) { MyData_P Result = nu
#include <stdio.h>
#include <stdlib.h>
#include <strings.h>
struct MyData_T
{
int MyInt;
char MyName[512];
char *MyCharPtr;
};
typedef
struct MyData_T *MyData_P;
MyData_P newData(char* AName)
{
MyData_P Result = null;
Result = malloc(sizeof(MyData_T));
strcpy(Result->MyName, AName, strlen(AName));
// do other stuff with fields
return Result;
} // MyData_P newData(...)
int main(...)
{
int ErrorCode = 0;
MyData_P MyDataVar = newData("John Doe");
// do more stuff with "MyDataVar";
free(MyDataVar);
return ErrorCode;
} // int main(...)
我正在使用一个爱好应用程序。我希望我的程序能够坚持“纯C”
由于多种原因,我必须使用C++编译器和支持“C”的相关编程环境程序。出于同样的原因,我不能换成她的编译器
<>和,有一些C++的特性,我无意中被编码了。 例如,我没有使用名称空间或类。我目前的编程工作不是“普通c”或“c++”,而且我已经有一段时间没有使用它们了,所以,我可能已经忘记了哪些东西只是“普通c” 我在互联网上浏览过“纯C”的例子。我发现许多其他开发人员也发布了混合的“纯c”和“c++”示例(其中一些是无意中发布的) 我正在使用一些动态分配的结构。我一直在用“malloc”,但我宁愿用“new”来代替。我认为一些新的标准和编译器版本的“普通c”允许“新”,但是,似乎我错了 似乎“new”是一个“C++”特性,如果我真的想制作一个“纯C”,我应该使用“malloc” 我之所以坚持使用“纯C”,是因为我在一个跨平台的非gui库/工具中工作 我目前的平台是“Windowze”,我的开发环境是: (1) 代码块(MinGW) (2) 流血事件DevCPP (3) Borland CBuilder 6 尽管如此,我的目标是将它迁移到Linux,也可能迁移到其他平台和其他(命令行)编译器 快速未测试示例:#include <stdio.h>
#include <stdlib.h>
#include <strings.h>
struct MyData_T
{
int MyInt;
char MyName[512];
char *MyCharPtr;
};
typedef
struct MyData_T *MyData_P;
MyData_P newData(char* AName)
{
MyData_P Result = null;
Result = malloc(sizeof(MyData_T));
strcpy(Result->MyName, AName, strlen(AName));
// do other stuff with fields
return Result;
} // MyData_P newData(...)
int main(...)
{
int ErrorCode = 0;
MyData_P MyDataVar = newData("John Doe");
// do more stuff with "MyDataVar";
free(MyDataVar);
return ErrorCode;
} // int main(...)
#包括
#包括
#包括
结构MyData\u T
{
int-MyInt;
char MyName[512];
char*MyCharPtr;
};
类型定义
结构MyData\u T*MyData\u P;
MyData\u P newData(char*AName)
{
MyData_P Result=null;
结果=malloc(sizeof(MyData_T));
strcpy(结果->MyName、AName、strlen(AName));
//对字段执行其他操作
返回结果;
}//MyData\u P newData(…)
int main(…)
{
int ErrorCode=0;
MyData_P MyDataVar=newData(“约翰·多伊”);
//用“MyDataVar”做更多的事情;
免费(MyDataVar);
返回错误码;
}//int main(…)
问题
注意:我已经花了几个小时试图在Stackoverflow中不发布相同的问题,但是,前面的答案对我来说似乎都不清楚。最重要的提示是使用.c扩展名保存文件并禁用编译器扩展名。在Visual C++和GCC(以及MinGW)上,这使得它们进入C模式,其中C++的添加将被禁用。
您还可以使用VC++中的
gcc
,/Tc
(或者c99
,这取决于您想要使用的C标准;它们还禁用GNU扩展)强制C模式(这里要禁用MS扩展,您必须使用/Za
)。如果使用visual studio,只需将文件设为.C即可(虽然它不是严格意义上的C编译器,但它假装是,而且大多数情况下已经足够好了)
*nix world您可以使用gcc,因为它几乎是标准的
<如果你想做C坚持C,如果你想做C++,使用C++ < /P>
<> P>使用Maloc等…在C++中使用智能指针。< /P>
-xC
选项。您还可以指定C标准的特定版本,例如-std=c99
。要确保您没有使用任何特定于GCC的扩展,可以使用-pedantic
标志。我确信其他编译器也有类似的选项malloc
和calloc
确实是在C中分配内存的方式new
和delete
在C中不受支持*在我看来,你应该强烈考虑将C++转换成任何非平凡的复杂应用。C++具有比C更强大的高级结构(例如智能指针、容器、模板)。这简化了C语言中的许多繁琐工作。学习如何有效地使用它们需要一段时间,但从长远来看,它们是值得的。
< p>不必使用C来创建跨平台的非GUI库。你也可以在C++中开发它。因为它是爱好,它是可以的,但是已经有这样的库了。 <> LI> GCC有一个C编译器,它是最基本的。你可以用“代码> Gcc-STD= C90
malloc
/calloc
是便携式的,在C语言中使用是安全的记住C和C++实际上是完全不同的语言,它们有一些共同的语法,但是C是一种过程语言,C++是面向对象的,所以它们是不同的编程范例。 gcc应该可以像C编译器一样正常工作。我相信MinGW使用它。它还具有可以指定的标志,以确保它使用的是正确版本的C(例如C99)
如果你想坚持C++,那么你就不能使用<代码>新< /C>(它不是C语言的一部分),但是只要你把你的对象放在奥连特上,就不应该有什么问题了。