時代と逆の流れで申し訳ない質問なんですが、C++ソースから、Cソースへ変換するアプリケーション、ツール等、ご存知ありませんでしょうか?
ここでいう変換とは、classをC言語のstructに変換したりする事です。つまり、classのメンバ関数を外に出したり、operator等の書き換えをしたりするものです。一部の変換ができる物や、補助的に使えるもの等でも構いませんので、よろしくお願いいたします。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

C++からC言語へのトランスレータに関してですが,以下の本に


若干その記述があります.

CユーザのためのC++入門,工藤智行,技術評論社,
ISBN4-87408-520 2 C3055

AT & TのC++コンパイラcfrontの機能として,C言語へのトランスレート
があるそうです.

具体的には上記の本のp. 26を参照して下さい.
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qその文字ごとに変換する事はできないのでしょうか?

例えば~やサイ(動物の)と入力する時に単にやさいと
入力して変換するとどうしても野菜等の漢字にしか変換されません
まあこれは象やサイのように前後になんらかの文字をはさめば0で変換はできるのですが
長文の場合ひらがなかカタカナにしか変換されないものがたまにあります
これらを一文字あるいは二文字等に限定して変換させる事はできないのでしょうか?
つまり通常10文字中5文字単位でしか変換できないが1・2文字で変換する事は
できないか?という事です
できればマウスは使わずにキーボードだけで
分かりにくくてすいません
回答お願いします

Aベストアンサー

たぶん、これのことではないかと思いますが、

文字の変換中に、
「Shift」キーを押しながら「←」「→」キーで
変換範囲を変更できると思います。

「やさい」の場合は変換範囲を上記の方法で「や」だけに変更して、
その後「→」キーで「さい」の部分に移動(ただの移動なので「Shift」キーははなす)
して変換すればできると思います。

お試しください。

Qコンパイルエラー'CObject::operator =' : private メンバ (クラス 'CObject' で宣言されている) にアクセスできません。

現在ダイアログA,B,Cがあります。

Aにはボタン2つ([C]呼び込みボタンと[格納]ボタン)、タブがあり、
Bにはエディットボックス(IDC_EDIT1)とスピンボタン(IDC_SPIN1)が
Cにもエディットボックス(IDC_EDIT2)とスピンボタン(IDC_SPIN2)があります。

BもCもスピンボタンを押すたびに数値が増減します。

それで、
Aは呼び出し元
BはAにあるタブ内に表示されるダイアログ
CはAのボタン押下で呼び出されるダイアログ

です。


Aのヘッダに

CBDlg m_bdlg;
CCDlg m_cdlg;

struct aaa {
int b; // Bダイアログのスピンの数値を格納する
  int c; // Cダイアログの〃
};

と定義しました。

Aの[格納]ボタンを押すと構造体に格納されるようにしたいので

void CADlg::OnBnClickedKakuno()
{
struct aaa astruct;
astruct.b = m_bdlg.GetDlgItemInt(IDC_EDIT1);
astruct.c = m_cdlg.GetDlgItemInt(IDC_EDIT2);
}


このようにしてコンパイルをしたところ

-------------------------------------------------
1>c:\program files\microsoft visual studio 8\vc\atlmfc\include\afxwin.h(1820) : error C2248: 'CObject::operator =' : private メンバ (クラス 'CObject' で宣言されている) にアクセスできません。
1> c:\program files\microsoft visual studio 8\vc\atlmfc\include\afx.h(559) : 'CObject::operator =' の宣言を確認してください。
1> c:\program files\microsoft visual studio 8\vc\atlmfc\include\afx.h(529) : 'CObject' の宣言を確認してください。
1> コンパイラでのこの診断により関数 'CCmdTarget &CCmdTarget::operator =(const CCmdTarget &)' が生成されました。
-------------------------------------------------

のようなエラーが発生しました。
どうすればよいのでしょうか?
解決法の程、ご教授いただければと思います。

現在ダイアログA,B,Cがあります。

Aにはボタン2つ([C]呼び込みボタンと[格納]ボタン)、タブがあり、
Bにはエディットボックス(IDC_EDIT1)とスピンボタン(IDC_SPIN1)が
Cにもエディットボックス(IDC_EDIT2)とスピンボタン(IDC_SPIN2)があります。

BもCもスピンボタンを押すたびに数値が増減します。

それで、
Aは呼び出し元
BはAにあるタブ内に表示されるダイアログ
CはAのボタン押下で呼び出されるダイアログ

です。


Aのヘッダに

CBDlg m_bdlg;
CCDlg m_cdlg;

struct aaa {
int...続きを読む

Aベストアンサー

1つ確認したいのですが, そのエラーメッセージは本当にその部分に対して出ているのですか? その関数の中身を空にしたら消えるのでしょうか?

QVistaで、誤変換や変換できないものがある

ここ最近、Windows Vista標準ので、
誤変換や文やフクスウの変換ができなくなってます。
普通の変換すらできない言葉もでてきてます。
今も2行目の「ふくすう」が変換できません。

発覚した変換できないもの(カナ変換しかできないもの)
こめんとらん=コメントラン
いか=イカ
いがい=イガイ
ふくすう=フクスウ
かいとう=カイトウ
しつもん=シツモン
おおい=オオイ
あやまる=アヤマル
ごへんかん=ゴヘンカン
おねがい=オネガイ
etc・・・・

あまりにもおおすぎて手におえません。
たまに「MicroSoft IME 誤変換」がどうとか警告がでてきます。
どうしたらなおるでしょうか?
アドバイスおねがいします。

Aベストアンサー

IME2007をお使いなら下記のURLを参照して修正プログラムをインストールされたらと思います。

IME 2007 変換精度、学習機能を改善した修正プログラムのご案内
http://www.microsoft.com/japan/office/2007/ime/fixmodule.mspx

QC言語のソースをC++言語に変換したい

C言語で書かれていたソースをC++言語に変換したいのですが
どのような点に気をつければよいでしょうか

現在、プログラムの主な構造は構造体とそれを扱う関数が実装されていて、
これらをクラスを使用して書き換えようと思います。
それ以外に気にしておくものはありますか。

例えば、ヘッダファイルで<stdio.h>をインクルードしているところがありますが、
これは<cstdio>に書き換えたほうがよいかもしれない、と言われたことはあります。
printfなどはprintfのまま使用しても大丈夫ですか。
std::printfに書き換えたり、iostreamを使用する方法に書き換えたほうがいいですか。
規格としてはどのようになっているのでしょうか。
(「過去との互換性のためにあるだけであり、非推奨」とかあったりしますか。)

Aベストアンサー

まず <stdio.h> などは言われるように「非推奨」なので「最終的には変更する」ことを前提にした方がいいでしょうね (たぶん C++1y までは大丈夫だと思うけど). とはいえ, 単純に
<cstdio> を #include しててきとうに std:: を付ける
だけでもだいたいいけますが. あえて <iostream> に直す必要はないです.

まあ, ヘッダ以外は「とりあえず拡張子だけ変えてコンパイルエラーが出たら考える」という行きあたりばったりな方法でもなんとかなっちゃいますけどね.

QVSODivxToDVD でDVDに変換できないAVIファイル

AVIファイルをDVDに変換するには、VSODivxToDVD を利用しています。ほとんどのAVIファイルは変換できますが、まれに変換できないものがあります。そのファイルは他のソフト、Avi2Dvd、AVI2ISO、DVD Flickで試してみてもできません。AVI2JPGで再出力しようとしてもできません。パソコンでは何の問題もなく再生できるので、何とかDVDに変換することができないものでしょうか?
それが可能なソフトや方法がありましたら教えて下さい。

Aベストアンサー

#2です。

・・・???
真空波動研の結果(ファイル名以降)はそれだけでしたか?

コンテナファイルの形式(まあAVIでしょうが)や音声コーデックがないですし、DivXのFourCCや、フレームレート、ビットレートが抜けてます。
48KHzというのは、音声のサンプリングレートだと思いますが、ビットレートが0(音声がない?)です。VBRというのは音声が可変ビットレートを採用しているということですが・・・

もし、真空波動研での確認内容がそれだけなら、変換に失敗したか、ファイルが壊れていて再生、変換できない、ということになると思いますよ。
再生は出来ましたか?

Qメソッドの定義のoperatorと*operatorについて

struct dBase {
void *operator new(size_t size size) { return dAlloc(size);}
void operator delete (void *ptr, size_t size){ dFree (ptr,size);}
void *operator new[] (size_t size) { return dAlloc (size);}
void operator delete[] (void *ptr, size_t size){ dFree (ptr, size);}
};
上記のプログラムは、ヘッダファイルの一部です。上記のoperatorと*operatorは、どのような意味があるのでしょうか?教えてください。

Aベストアンサー

operatorが何かわからないのですよね。
C++では関数だけでなく演算子もオーバーロード(多重定義)が出来ます。
operatorはそのためのキーワードです。
iostreamの >> や << で入出力できるのも演算子のオーバーロードができるからです。

Qにち ←なぜ漢字に変換できないのでしょうか?

【ひ】は【日】に変換できるのに、
【にち】はなぜ【日】に変換できないのでしょうか???

Aベストアンサー

もしかして「に」と「ち」で分かれて変換されてしまうということではないでしょうか?
その場合「Shift+右矢印キー」で「にち」全体にフォーカス(?)をかけて再度変換すれば「にち」で変換できると思います。

上記でない場合は、あまりに基礎的なことを言ってしまいすみません。
私もだいぶ前(PC初心者の頃)ですが、「しゅつ」が「主津(しゅ+つ)」になってしまい、「出」が出ないと大騒ぎした経験があるものですから…

QC++のstructが確保される領域について

C++ではstructはクラスとして扱われるそうですが、
確保される領域はスタック領域だと聞きました。

StructHoge *structHoge = new StructHoge;

とした場合structHogeに入っているStructHogeインスタンスのアドレスが指し示しているのは
 スタック領域なのでしょうか?

Aベストアンサー

new でとってくるのは通称「ヒープ」と呼ばれる領域.

ただし規格上はそもそも「スタック領域」なるものが存在しない.

Q漢字変換できないまま・・・

以前よりパソコンで漢字変換できなくなったトラブルを質問していましたが、多くの方に親切な回答を頂く事ができました。しかし結局どの方法を試しても元に戻る事はありませんでした。昨日リカバリーしましたがそれでも無理でした。なのでキーボードを買い換えようと考えています。しかしキーボードの故障かどうかがわからないので買い換える前にそれを確認する方法ってあるのでしょうか?(キーボードを変えても改善されないっていうパターンが嫌なので)
ちなみに症状としては、
・半角/全角キーで言語バーのカナ変換できない。
・スペースキーと変換キーが全く効かないので変換とスペースがあけられない。
・無変換キーでひらがなをカタカナには変換できる。
・ソフトキーボードでは変換できる。

宜しくお願い致します。

Aベストアンサー

kinkakutouさん 今日は!
済みません。
追加と訂正です。
>(キーボードを変えても改善されないっていうパターンが嫌なので)
質問者さんの内容を取り違えて居ました。ご免なさい!
正:
キーボードの故障ではなさそうです。
ポイントは、言語バーの設定です。
1:言語バーの「ツール」→「プロパティ」を選択し、画面の「標準に戻す」ボタンをクリックします。
2:前回回答のページで、基本設定します。
3:設定が終了したら、もう1度「プロパティ」で右上の「設定」アイコンをクリックし、画面の「キー設定」TABのキー一覧を確認します。
>・半角/全角キーで言語バーのカナ変換できない。
キーの半角/全角が、IMEオン/オフ(入力)以下項目は全て「-」。
半角/全角キーで言語バーは、立ち上げ時は「A」→「あ」の切替えになります。
>・スペースキーと変換キーが全く効かないので変換とスペースがあけ
>られない。
キーのスペースキーは、空白・全変換・変換+次・変換+次・文節変換
・全変換を確認します。
キーのシフト+スペースキーは、入力以外は半角空白を確認します。
これでIMEは修復可能です。
恐らくポイントの1で元に戻ると思います。

kinkakutouさん 今日は!
済みません。
追加と訂正です。
>(キーボードを変えても改善されないっていうパターンが嫌なので)
質問者さんの内容を取り違えて居ました。ご免なさい!
正:
キーボードの故障ではなさそうです。
ポイントは、言語バーの設定です。
1:言語バーの「ツール」→「プロパティ」を選択し、画面の「標準に戻す」ボタンをクリックします。
2:前回回答のページで、基本設定します。
3:設定が終了したら、もう1度「プロパティ」で右上の「設定」アイコンをクリックし、画面の...続きを読む

QC++ operatorの使用について

C++初心者で、現在オペレーターの使用方法について勉強しています。

下記プログラムの「 x = x + z;」箇所の処理について、理解できず行き詰っています。
初期化した際のx, y, zそれぞれの値が
x = Help
y = !e
z = M
となったところまでは、理解できています。

その後、x = x + zの処理に入る際、
1.abc operator+(abc)
2.void operator=(abc)
の順でオペレーターの処理を行うと思います。

その際、1.はzを使用して処理をするところまでは分かるのですが、
return value: HelpM\n(\:バックスラッシュ)がx, y, zのどこに入るのか、
その後どのオブジェクトを持って2.の処理に入るのかどうか
理解できておりません。

初心者のため、文章がわかりづらい点等あるかと思いますが、
アドバイス頂けたら幸いです。

宜しくお願いいたします。

==========================================================================
#include <cstdio>
#include <cstring>

class abc {
char def[21];
public:
abc(void) { strcpy(def, "Help"); }
abc(const char s[ ]) { strcpy(def, s); }
abc(char c) {
def[0] = c;
def[1] = '\0';
}
void operator=(abc); // redefines = between abc's!!!
abc operator+(abc);
void out( ) {
printf("%s\n", def);
}
};

void abc::operator=(abc x) {
int i, n = strlen(x.def);
for(i = 0; i < n; i++)
def[i] = x.def[n - (i + 1)];
def[n] = '\0';
}

abc abc::operator+(abc a) {
int i = 0;
abc c;
strcpy(c.def, def);

while(c.def[i] != '\0')
i++;
for(int j = 0; a.def[j] != '\0'; j++) {
c.def[i] = a.def[j];
i++;
}
c.def[i] = '\0';
return c;
}

int main( ) {
abc x, y("!e"), z('M');
x = x + z;
x.out( );

y = y + x;
y.out( );
return 0;
}

C++初心者で、現在オペレーターの使用方法について勉強しています。

下記プログラムの「 x = x + z;」箇所の処理について、理解できず行き詰っています。
初期化した際のx, y, zそれぞれの値が
x = Help
y = !e
z = M
となったところまでは、理解できています。

その後、x = x + zの処理に入る際、
1.abc operator+(abc)
2.void operator=(abc)
の順でオペレーターの処理を行うと思います。

その際、1.はzを使用して処理をするところまでは分かるのですが、
return value: HelpM\n(\:バックスラッシュ)が...続きを読む

Aベストアンサー

> デバック処理で追った結果、abc::operator+(abc a)を抜けた時点で、x.defが"HelpM"に変更されており、その後xを引数としてabc::operator=(abc x)へ処理しているように見えました。

そうですか?
operator+の定義からすると、新たにcというオブジェクトを作成して、cにxの内容をコピーし、cに対してaの内容を結合したあとでcをreturnしていると思いますが。

> x=xから処理されないのは何故でしょうか。

演算子には優先順位というものがあります。代入演算=は加算演算子+よりも優先順位が低いため、+の方が先に処理されます。
算数で、1+2*3は2*3を先に計算すると教わりましたよね。それと同じように、演算子によって優先順位が付けられていて、順位の高いものから処理されます。順位が同じ場合には計算の方向が決められています。例えば、+を複数使用した式の場合、左から右へ処理すると決められているため、a+b+cはa+bを先に処理する、つまり(a+b)+cとして処理されます。代入演算子=の場合は逆に右から左と決められているため、a=b=1はb=1のあとでa=bが処理されます。

> デバック処理で追った結果、abc::operator+(abc a)を抜けた時点で、x.defが"HelpM"に変更されており、その後xを引数としてabc::operator=(abc x)へ処理しているように見えました。

そうですか?
operator+の定義からすると、新たにcというオブジェクトを作成して、cにxの内容をコピーし、cに対してaの内容を結合したあとでcをreturnしていると思いますが。

> x=xから処理されないのは何故でしょうか。

演算子には優先順位というものがあります。代入演算=は加算演算子+よりも優先順位が低いため、+の方が先...続きを読む


人気Q&Aランキング

おすすめ情報