2011-12-21 8 views
1

概要使用して、Cプレーン:私は趣味アプリで働いている新しいキーワード

を。自分のプログラムが「プレーンC」に固執できるようにしたい。

、いくつかの理由から、私は「平野C」をサポートC++コンパイラ、および関連するプログラミング的環境プログラムを、使用する必要があります。同じ理由から、私はコンパイラーに変更することはできません。

また、意図せずにコード化されたC++機能がいくつかあります。

たとえば、私は名前空間やクラスを使用していません。私の現在のプログラミングの仕事は、 "plain c"や "C++"ではないし、しばらく使っていないので、どのようなものが "plain c"なのか忘れているかもしれない。

インターネットで「Plain C」の例を閲覧しました。私は、多くの他の開発者が混在した "plain c" & "C++"の例(それらのうちのいくつかは意図せず)を投稿していることがわかりました。

私はいくつかの動的に割り当てられた構造を使用しています。私は "malloc"を使用していますが、むしろ代わりに "new"を使用します。私はいくつかの新しい標準& "plain c"のコンパイラバージョンは "新しい"を許可したと思ったが、私は間違っているようだ。

"new"が "C++"機能であると思われます。& "plain c"だけを作成したい場合は、 "malloc"を使用してください。私は、クロスプラットフォーム非GUIライブラリ/ツールで働いているので、

私は「プレーンC」に固執したい理由は、それがあります。

私の現在のプラットフォームは "Windowze"、私の開発Enviroments、あるある:

(1)コードブロック(MinGWの)

(2)流血DevCPP

(3)ボーランド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)の作業 "のみCプレーン" を取得することができます

  1. クイック例をテストされていませんか?

  2. 私は "malloc"、 "calloc"などを使用するべきでしょうか?

  3. 私は、 "C++" に変更することを検討してください& "新しい"、代わりに?

  4. 「プレーンC」アプリケーションで「新しい」&「削除」を使用することは有効ですか?

  5. 他の提案はありますか?

ありがとう。

免責 注:私はすでにStackOverflowの中で、同じ質問を投稿しないようにしようと数時間を過ごした、しかし、以前の回答のどれも私には明確なようではありません。

+4

C++は「新」以上の*たくさんの*です。 C言語を書いたければ、C++コンパイラではなくCコンパイラを使用したいと思います。 Windows用のCコンパイラが必要な場合は、MinGW – Flexo

+0

を参照してください。ほとんどのC++コンパイラには、ソースがC++ではなくC言語であると解釈されるコマンドラインフラグがあります。 。私は、適切なモードに設定されていると、C標準を厳密に実施するC/C++コンパイラがあるという事実を知っています。あなたはちょうど1つを見つけて、正しいモードを見つけなければなりません。 –

+0

ほとんどのC++コンパイラには "plain C"としてコンパイルするオプションがあります。 Visual StudioとGCCは、少なくとも私は他の人も同様にやっていると思います。ファイルの名前を '.c'に変更し、ほとんどが自動的に「プレーンC」としてコンパイルされます。 –

答えて

4

実際にはCとC++は完全に異なる言語です。いくつかの共通構文を共有していますが、Cは手続き型言語であり、C++はオブジェクト指向であるため、プログラミングのパラダイムが異なります。

gccはCコンパイラとしてうまく動作するはずです。私はMinGWがそれを使うと信じています。また、適切なバージョンのC(C99など)を使用していることを確認するために指定できるフラグもあります。

もしC言語に固執したいのであれば、new(これはC言語の一部ではありません)を使うことはできませんが、共有ライブラリのC++への移行には問題はありません。オブジェクト指向の帽子を置いている間は長いです。

私はあなたがより快適である言語に固執することを提案します。 newを使用しているということは、C++になることを示唆していますが、それはあなた次第です。

0

最も重要なヒントは、ファイルを.c拡張子で保存し、コンパイラ拡張子を無効にすることです。 Visual C++とgcc(したがってMinGW)の両方で、C++の追加が無効になるCモードになります。

あなたができるも Cモード(使用したいCの標準に応じて、または c99;これらはまた、GNU拡張を無効にする) -std=c90を使用して

あなたがする必要があるMS拡張機能を無効にするここではVC++(とでgccで、/Tc/Zaを使用してください)。

0

のVisual Studioを使用している場合は、単にファイル.Cを作る(その厳密にはCコンパイラが、それがためにふり、そしてほとんどのため、十分です)

* nixの世界gccを使用することができ、そのほとんどは標準です。

あなたは、あなたがスマートポインタを使用したい++ C++

はとてもCに.... malloc関数などにこだわる使用し、C++を行いたい場合は、CにCスティックを行いたい場合。

4
  1. CコンパイラとしてのGCC。 C言語でコンパイルするには、-x cオプションを使用してください。特定のバージョンのC標準を指定することもできます。 -std=c99。 GCC固有の拡張機能を使用しないようにするには、-pedanticフラグを使用できます。私は他のコンパイラにも同様のオプションがあると確信しています。

  2. malloccallocはあなた次第ですC.

  3. にメモリを割り当てる方法を確かにしています。 *あなたはクロスプラットフォームになりたいと言いますが、C++は基本的にCと同じ "クロスプラットフォーム"です。しかし、組み込みプラットフォーム(マイクロコントローラやDSPなど)で作業している場合、C++それらのためのコンパイラ。

  4. いいえ、newdeleteが私の意見では* C.


でサポートされていない、しかし、あなたは強く非自明な複雑さの任意のアプリケーションのためのC++への切り替えを検討すべきです。 C++はC言語の面倒な作業を単純化するC(例えばスマートポインタ、コンテナ、テンプレート)よりもはるかに強力な高レベルの構造を持っています。それらを効果的に使う方法を学ぶのに時間がかかりますが、それに値するだろう。

0

クロスプラットフォーム非GUIライブラリを作成するためにCを使用する必要はありません。あなたはC++でそれを開発することもできます。趣味なのでOKですが、すでに利用できるライブラリがあります。

+1

本当の間、私はそれが実際の質問に対処しているか分からない:) –

1
  • GCCにはCコンパイラがあります。それは基本的なものです。 gcc -std=c90と呼ぶと、GnuやC++の拡張機能で滑っていないことを確認できます。
  • はい、malloc/callocはCもう少しポータブル、あまりないことで、これらの日です...あなたがC++に切り替えるためにいくつかの理由がある場合にのみ
  • C
  • に使用するためのポータブルおよび安全です。
関連する問題