ページ 1 / 1
またまた質問なのですが
Posted: 2008年11月12日(水) 21:06
by うい
ここにあるプログラムに自分の知っているC言語を追加したい場合は.cと保存すればよいのでしょうか?
それとも.cppとやってもうまくいくのでしょうか?
使っているのはVC++です。
Re:またまた質問なのですが
Posted: 2008年11月12日(水) 21:41
by box
ここにあるプログラムとは、具体的に何でしょうか?
自分の知っているC言語を追加する、とはどういう意味でしょうか?
何か新しい機能を追加したいのですか?
何回目の質問であるかはどうでもいい話。
質問の内容を端的に要約したタイトルを付けてほしいです。
Re:またまた質問なのですが
Posted: 2008年11月12日(水) 23:41
by conio
とりあえず2通りに解釈してみます。
①「C++のプログラムでCの記述方法で使っても問題は無いのか」
②「C言語で用いていたヘッダを、C++で使えますか」
まず、①の質問だとすると、
C++はもともとCの拡張版なので、".cpp"でC言語の記述方法を使っても基本的にエラーは出ない筈です。
ただ、".c"でC++限定の記述方法を使うと、エラーが出ます。
(cout << とか)
次に、②の質問だとすると、
C++では、Cから引き継がれたヘッダは同じように記述することは出来ません。
Cから引き継がれたヘッダは、先頭にCを付けて、".h"を取り去ります。
例えば、
<time.h> ⇒ <ctime>
<stdlib.h> ⇒ <cstdlib>
こんな感じです。
Re:またまた質問なのですが
Posted: 2008年11月13日(木) 12:39
by Dixq (管理人)
「ここ」にあるといってもこちらの本家HP、ゲームの館、シューティングの館、龍神録の館、サンプルの館・・たくさんプログラムコードが公開されているので、どのプログラムかわかりません。
ピュアCでOKなコードもあればC++じゃないとコンパイルが通らないコードもあります。
特に特別な理由が無い限り、拡張子は.cppでいいと思います。
.cppでもピュアCのコードはコンパイル出来ます。
もしそれでもピュアCでコンパイルしたいときはその理由を書いてもらえるとよいかと思います。
質問の仕方がよくわからないときは規約をお読みください。
Re:またまた質問なのですが
Posted: 2008年11月14日(金) 04:08
by うい
いろいろと慣れてないところがあり、よくわからない質問をしてしまってすみません。
解釈はconioさんの1であっています。
ありがとうございました。
Re:またまた質問なのですが
Posted: 2008年11月14日(金) 08:28
by たかぎ
conioさん
> C++はもともとCの拡張版なので、".cpp"でC言語の記述方法を使っても基本的にエラーは出ない筈です。
そんなことはありません。
一例を挙げると、
int main(void)
{
puts("Hello, World!");
return 0;
}
は、Cではコンパイルできますが、C++ではエラーになります。
> C++では、Cから引き継がれたヘッダは同じように記述することは出来ません。
そんなことはありません。
C++でも<stdlib.h>などを使うことができます。
Re:またまた質問なのですが
Posted: 2008年11月14日(金) 22:03
by conio
>>たかぎさん
前者の指摘については「エラーが出る場合もある」という事は知っておりました。(下記ページ3段落目)
http://wisdom.sakura.ne.jp/programming/cpp/cpp1.html
"基本的にエラーは出ない" ≠ "絶対にエラーが出ることは無い"
"基本的にエラーは出ない" = "Cの記述法も使える事は使えるが、エラーが出る場合も当然ながらある"
と解釈して頂ければと。言い方が宜しくなかったです。すいません。
後者については、下記のページなどを見て理解していたつもりでしたが、私が間違えていたようです。
http://plaza8.mbn.or.jp/~haraheri/data/data_cpp.html
「両方の記述方法が可能だが、それぞれ名前空間の指定などにおいて差異がある」、との事でした。
自分もまだまだなので、精進したいと思います(_ _;)
Re:またまた質問なのですが
Posted: 2008年11月14日(金) 22:20
by たかぎ
> 基本的にエラーは出ない
は、C言語ではエラーにすべきところでエラーにならないような場合を除いて...
といった意味かと解釈していました。
例えば、
char s[10];
strcpy(s, 'a');
のような場合ですね。
ちなみに、C++では、Cでは使えた方法が使えずに困ることも実際にあります。
例えば、
#define alignof(type) offsetof(struct { char a; type b; }, b)
struct A
{
char a;
int b;
double c;
};
size_t d = alignof(A);
といったコードは、CではコンパイルできますがC++ではエラーになります。
static int a;
int main(void)
{
...
}
static int a = 123;
といったコードもそうです。
一応、念のため。