使用新关键字的纯C

uml*_*cat 1 c

概述:

我正在使用一个业余应用程序。我希望我的程序能够坚持“普通C”。

由于多种原因,我必须使用支持“ Plain C”的C ++编译器以及相关的编程环境程序。并且,出于相同的原因,我无法更改为其他编译器。

而且,我无意中编码了一些C ++功能。

例如,我没有使用名称空间或类。我当前的编程工作不是“普通c”或“ c ++”,而且我已经有一段时间没有使用它们了,所以,我可能已经忘记了哪些东西仅是“普通c”。

我在Internet上浏览了“ Plain C”示例。我发现许多其他开发人员也发布了混合的“ plain c”和“ c ++”示例(其中一些是无意的)。

我正在使用一些动态分配的结构。我一直在使用“ malloc”,但是我宁愿使用“ new”。我以为“ plain 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(...)
Run Code Online (Sandbox Code Playgroud)

问题

  1. 在哪里可以获得适用于x86(windowze,linux)的“仅纯c”编译器?

  2. 我应该坚持使用“ malloc”,“ calloc”和类似名称吗?

  3. 我应该考虑改为使用“ C ++”和“ new”吗?

  4. 在“普通c”应用程序中使用“ new”和“ delete”是否有效?

  5. 还有其他建议吗?

谢谢。

免责声明 注意:我已经花了几个小时试图不在Stackoverflow中发布相同的问题,但是以前的答案对我来说都不是很清楚。

Cam*_*ner 5

请记住,C和C ++实际上是完全不同的语言。它们共享一些通用的语法,但是C是一种过程语言,而C ++是面向对象的,因此它们是不同的编程范例。

gcc应该可以作为C编译器正常工作。我相信MinGW使用它。您还可以指定标志来确保它使用的是正确版本的C(例如C99)。

如果您想坚持使用C,那么您将根本无法使用new(它不是C语言的一部分),但是只要将您的C语言放到共享库中,使用C ++就不会有任何问题。做面向对象的帽子。

我建议您只使用您更熟悉的语言。您正在使用的事实new表明这将是C ++,但这取决于您。