概述:
我正在使用一个业余应用程序。我希望我的程序能够坚持“普通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)
问题
在哪里可以获得适用于x86(windowze,linux)的“仅纯c”编译器?
我应该坚持使用“ malloc”,“ calloc”和类似名称吗?
我应该考虑改为使用“ C ++”和“ new”吗?
在“普通c”应用程序中使用“ new”和“ delete”是否有效?
还有其他建议吗?
谢谢。
免责声明 注意:我已经花了几个小时试图不在Stackoverflow中发布相同的问题,但是以前的答案对我来说都不是很清楚。
请记住,C和C ++实际上是完全不同的语言。它们共享一些通用的语法,但是C是一种过程语言,而C ++是面向对象的,因此它们是不同的编程范例。
gcc应该可以作为C编译器正常工作。我相信MinGW使用它。您还可以指定标志来确保它使用的是正确版本的C(例如C99)。
如果您想坚持使用C,那么您将根本无法使用new
(它不是C语言的一部分),但是只要将您的C语言放到共享库中,使用C ++就不会有任何问题。做面向对象的帽子。
我建议您只使用您更熟悉的语言。您正在使用的事实new
表明这将是C ++,但这取决于您。