掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

 題名と投稿者名は具体的に書きます。
 課題の丸投げはしません。
 ソースの添付は「HTML変換ツール」で字下げします。
 返信の引用は最小限にします。
 環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
 返信の付いた投稿は削除しません。
 マルチポスト(多重投稿)はしません。

掲示板2

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.23683

C++記述をCに変換する
投稿者---ぴっぴ(2005/10/18 14:21:48)


typedef struct{
unsigned char *data;
] List;

list.data = new data[1];

という記述の部分で、

list.data = new data[1];

でnew演算子が使われているのですが、Cでは使えないので、
どんな形にしたらいいのでしょうか?


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:C++記述をCに変換する 23684 Blue 2005/10/18 14:35:31


No.23684

Re:C++記述をCに変換する
投稿者---Blue(2005/10/18 14:35:31)


>typedef struct{
> unsigned char *data;
>] List;
>
>list.data = new data[1];
>でnew演算子が使われているのですが、Cでは使えないので、
>どんな形にしたらいいのでしょうか?
これって正しいソースですか?

list.dataは unsigned char のようにみえますけど data型(クラス?)とは?
data型がクラスである場合は、単純にmallocが使えません。

もう少し、詳しく、正しいソースを載せてくれませんか?
(コンパイラ、OS等の環境も明記してほしい)



この投稿にコメントする

削除パスワード

No.23685

Re:C++記述をCに変換する
投稿者---ぴっぴ(2005/10/18 15:47:21)


分かりにくく書いて申し訳ありませんでした。
本来かかれてあるのは、
private struct ListCommandTx
{
public byte start;
public byte length;
public byte command1;
public byte [] data;
public byte bcc;
}

と宣言されていて、
あとから出てくる関数の中で、

ListCommandTx commandTx;

commandTx.data = new byte[1];

という風になっています。

それを、C言語に書き直しているのですが、
宣言の部分を、

typedef struct {
unsigned char start;
unsigned char length;
unsigned char command1;
unsigned char *data;
unsigned char bcc;
} List;

としているのですが、
関数の中の、

ListCommandTx commandTx;

commandTx.data = new byte[1];

をどういう形にCに直せばいいのかわからないのです。



この投稿にコメントする

削除パスワード

No.23687

Re:C++記述をCに変換する
投稿者---Blue(2005/10/18 16:01:48)


>private struct ListCommandTx
>{
>public byte start;
> public byte length;
> public byte command1;
> public byte [] data;
> public byte bcc;
>}
これってC++ですか?MC++(.NET Frameworkをつかったやつ)とかJavaとかではないですよね?

> (コンパイラ、OS等の環境も明記してほしい)
は?
もとのソースの言語の環境もほしいです。


この投稿にコメントする

削除パスワード

No.23688

Re:C++記述をCに変換する
投稿者---RiSK(2005/10/18 16:03:53)


>本来かかれてあるのは、
>private struct ListCommandTx
>{
>public byte start;
> public byte length;
> public byte command1;
> public byte [] data;
> public byte bcc;
>}

本当にC++? Javaに見える。

>ListCommandTx commandTx;
>
>commandTx.data = new byte[1];
>
>をどういう形にCに直せばいいのかわからないのです。

newはmallocとコンストラクタ呼び出しに置き換えられます。


この投稿にコメントする

削除パスワード

No.23691

Re:C++記述をCに変換する
投稿者---ぴっぴ(2005/10/18 16:24:08)


一応、C#で書かれているプログラムです。
C++じゃないかも・・・

>newはmallocとコンストラクタ呼び出しに置き換えられます。

ってmallocを使ってどういう風に書けばいいのでしょうか。


この投稿にコメントする

削除パスワード

No.23694

Re:C++記述をCに変換する
投稿者---Blue(2005/10/18 16:40:14)


C#はC++ではありません。

マネージドの System::Byte構造体と アンマネージの unsigned char は等価
かどうか定かではないですが、領域だけ確保したいならば、

unsigned char* b = malloc( 1 );

とかけます。ただし、場合によってはfreeで領域を開放しなければなりません。
(ここがアンマネージといわれるところ)

C#をCにするのはかなり至難の業だと思います。
(しかも、Cの知識がないとなると。。。南無)



□環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
↑にチェックいれて質問しているのではないのですか?
何度環境を明示してくださいといえばいいのでしょうか?それともムシでしょうか?


この投稿にコメントする

削除パスワード

No.23696

Re:C++記述をCに変換する
投稿者---ぴっぴ(2005/10/18 16:42:50)


OSはWindows XP Proです

Microsoft Visual Studio .NET 2003
でプログラムを書いています。

アドバイスありがとうございました!


この投稿にコメントする

削除パスワード

No.23697

Re:C++記述をCに変換する
投稿者---RiSK(2005/10/18 16:51:23)


# 雑談

>C#をCにするのはかなり至難の業だと思います。

現在,お遊びでやってます。
.Net FrameworkをCに移植みたいな感じで。
一つのクラスを書くのに.h二つと.c一つ使います。
メソッドについてはpublic, protected, privateは実現できましたが,
メンバ変数はprotected onlyです。

また,継承も実現できましたが,
多重継承(インタフェースの実装)は(文法的に)美しくするのは
不可能という結論に至っているところ。
# CではDerivedType*からSuperType*へキャストしたときに
# オフセット変更してくれないんだもん。


この投稿にコメントする

削除パスワード

No.23698

Re:C++記述をCに変換する
投稿者---Blue(2005/10/18 17:05:25)


<雑談>

> 現在,お遊びでやってます。
> .Net FrameworkをCに移植みたいな感じで。
おおっ!すごそう。

いつか公開されることを心から願っています。といってみるw

</雑談>



この投稿にコメントする

削除パスワード

No.23695

Re:C++記述をCに変換する
投稿者---YuO(2005/10/18 16:42:30)


>一応、C#で書かれているプログラムです。
>C++じゃないかも・・・

C♯はC++とは別物です。


>>newはmallocとコンストラクタ呼び出しに置き換えられます。
>ってmallocを使ってどういう風に書けばいいのでしょうか。

typedef unsigned char byte;
のようにしておいて,
malloc(1 * sizeof(byte))
とすればできます。

……このあたりがわからないのであれば,Cの勉強が先だと思うのですが……。
# これは,C♯→Cのポートを行う上で,簡単な方の部分ですよ。


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧