質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

2885閲覧

【C言語の質問です】拡張子について。。。

退会済みユーザー

退会済みユーザー

総合スコア0

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2016/03/01 01:06

編集2016/03/01 01:14

*たくさんの方よりご指摘をいただけてとてもありたいです。
引き続き、よろしくお願い致します。

C言語を勉強している初心者のものです。

今回は、拡張子でわからないことがあり、
質問させていただきます。

現在課題制作をしているのですが、
c拡張子では動かず、cpp拡張子では動くプログラムが出てきました。
下記のサイトを見て、それぞれに違いがあることはわかったのですが、具体的にどこが間違っているのかわからない状況です。
C言語とC++言語について
どうすればc拡張子で動くのかご教示いただけますと幸いです。
ちなみに別途質問させていただいている

【C言語の質問です】A-Fの文字列をランダムに並べ替えるプログラムの作成について

のソースになります。

コンパイルすると下記が出てまいります。

エラー E2140 reirei1414.c 12: ここでは宣言はできない(関数 main )

#include <stdio.h> #include <string.h> #include <time.h> #include <stdlib.h> char *strshf(char *s); int main(void) { srand((unsigned)time(NULL)); char str[] = "ABCDEF"; printf("before:%s\n", str); strshf(str); printf("after :%s\n", str); return 0; } char *strshf(char *s) { int len = strlen(s); int i,j; char temp; for (i = len-1 ; i > 0 ; i--) { j = rand()%i; temp = s[j]; s[j] = s[i]; s[i] = temp; } return s; }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2016/03/01 01:10

拡張子を「.c」としてコンパイルした場合、どのようになるのでしょうか。コンパイルエラーか実行時エラーか結果が正しくないのか、出力されるメッセージを含めて追記いただければ幸いです。
退会済みユーザー

退会済みユーザー

2016/03/01 01:14

ご回答ありがとうございます。 また記載漏れ失礼いたしました。 文章に追記させていただきました。 よろしくお願い致します。
guest

回答1

0

ベストアンサー

恐らく

C

1int main(void) 2{ 3 char str[] = "ABCDEF"; 4 srand((unsigned)time(NULL));

のように行を入れ替えてみてください。

または、コンパイラのオプションで規格をC99にしてください


C言語にも規格(≒バージョン)があり、
古い規格では、
「(ファイルスコープでない)変数はブロックの先頭にまとめて宣言しなければならない」
という制約がありました。
が、大変読みづらいコードができやすくなります。
別言語であるC++はこの制約はありません。

C99という規格以降はこの制約がなくなりました。
これにより例えば、

C

1for(int i=0; i<10 ; i++) {...}

みたいに書けます。

投稿2016/03/01 01:13

編集2016/03/01 01:27
ozwk

総合スコア13512

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/03/01 01:17

ご回答ありがとうございます。 できました!! これは、最初にランダムに並べ替える要素がなかったため、 エラーが出ていた形でしょうか。
otn

2016/03/01 01:21 編集

> 最初にランダムに並べ替える要素がなかったため、エラーが出ていた形でしょうか。 ちがいます。 実行文srandの前に宣言文charを書く必要があります。 実行文と宣言文の違いは分かりますか?
ozwk

2016/03/01 01:28

追記しました。 古いバージョンのCの文法の話です。
退会済みユーザー

退会済みユーザー

2016/03/01 04:48

ご回答ありがとうございます。 そうだったんですね! ご教示ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問