Обзор:равнину с использованием нового ключевого слова
Я работаю с приложением хобби. Я хочу, чтобы моя программа была в состоянии придерживаться «простой C».
По ряду причин мне приходится использовать компилятор C++ и соответствующую программу для программирования, поддерживающую «Plain C». И по тем же причинам я не могу перейти на компилятор antoher.
И есть некоторые возможности C++, которые я был закодирован, непреднамеренно.
Например, я не использую пространства имен или классы. Мое текущее задание на программирование не является «простым c» или «C++», и я не использовал их некоторое время, поэтому, возможно, я забыл, какой материал является «простым c».
Я просматривал в Интернете, для примеров «Plain C». Я обнаружил, что многие другие разработчики также опубликовали смешанные «простые c» & «C++» примеры (некоторые из них непреднамеренно).
Я использую некоторые динамически распределенные структуры. Я использую «malloc», но вместо этого я скорее использую «новый». Я думал, что некоторые новые версии компилятора & «plain c» разрешили «новый», но, кажется, я ошибаюсь.
Кажется, что «новое» является функцией «C++», &, если я действительно хочу сделать только «простой c», я должен использовать «malloc».
Причина, по которой я хочу придерживаться «простой C», это потому, что я работаю в кросс-платформенной библиотеке/инструменте для не-gui.
Моя текущая платформа "Windowze", мое развитие окружающих средах, являются:
(1) CodeBlocks (MinGW)
(2) Кровопролитие DevCPP
(3) Borland CBuilder 6
Хотя, моя цель - перенести его в Linux и, возможно, на другую платформу s и другие (коммандные) компиляторы.
Быстрый не Испытано Пример:
#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(...)
Вопросы
Где я могу получить рабочий "простой с только" компилятор для x86 (windowze, Linux)?
Должен ли я использовать «malloc», «calloc» и тому подобное?
Должен ли я перейти на «C++» & «новый», а?
Действительно ли «новый» & «удалить» в приложении «plain c»?
Любое другое предложение?
Спасибо.
Отказ Примечание: Я уже потратил несколько часов, пытаясь не размещать один и тот же вопрос, в Stackoverflow, но, ни один из предыдущих ответов не кажется ясным мне.
C++ - * много * больше, чем просто 'new'. Если вы просто хотите написать C, я бы использовал компилятор C, а не компилятор C++. Если вы хотите компилятор C для окон, я бы посмотрел на MinGW – Flexo
. Большинство компиляторов C++ имеют флаг командной строки, в котором говорится, что источник должен интерпретироваться как C, а не C++, и, вероятно, у многих есть флаги, говорящие, как строго это следует применять , Я знаю, что существуют компиляторы ARE C/C++, которые строго соблюдают стандарт C, когда они установлены в надлежащий режим. Вам просто нужно найти его и найти нужный режим. –
Большинство компиляторов C++ имеют возможность компилировать как «plain C». Visual Studio и GCC, по крайней мере, я бы предположил, что другие тоже. Переименуйте файл в '.c', и большинство будет автоматически компилироваться как« plain C ». –