Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用new关键字的纯c_C - Fatal编程技术网

使用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(…)
问题

  • 在哪里可以得到一个适用于x86(windowze,linux)的“纯c”编译器

  • 我应该坚持使用“malloc”、“calloc”和类似的词吗

  • >P>是否应该改为“C++”和“新”,而不是

  • 在“普通c”应用程序中使用“新建”和“删除”是否有效

  • 还有其他建议吗

  • 谢谢

    免责声明
    注意:我已经花了几个小时试图在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>
  • 例如,您可以将GCC用作C编译器。要确保它以C编译,请使用
    -xC
    选项。您还可以指定C标准的特定版本,例如
    -std=c99
    。要确保您没有使用任何特定于GCC的扩展,可以使用
    -pedantic
    标志。我确信其他编译器也有类似的选项

  • malloc
    calloc
    确实是在C中分配内存的方式

  • 你说你想成为跨平台的,但是C++本质上就像C一样是“跨平台”的。然而,如果你在嵌入式平台(例如微控制器或DSP)上工作,你可能找不到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++实际上是完全不同的语言,它们有一些共同的语法,但是C是一种过程语言,C++是面向对象的,所以它们是不同的编程范例。 gcc应该可以像C编译器一样正常工作。我相信MinGW使用它。它还具有可以指定的标志,以确保它使用的是正确版本的C(例如C99)

    如果你想坚持C++,那么你就不能使用<代码>新< /C>(它不是C语言的一部分),但是只要你把你的对象放在奥连特上,就不应该有什么问题了。