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

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

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

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

Q&A

解決済

3回答

1335閲覧

c言語、「identifier」を付け忘れています。と表示され、困っています。

Mu03

総合スコア11

C

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

0グッド

0クリップ

投稿2019/06/30 11:34

編集2019/06/30 11:40

前提・実現したいこと

テトリスを小一時間で作ってみたという動画を参考に、
初めてc言語のプログラミングを試してみました。
(https://www.youtube.com/watch?v=iosmmQvhyzM&list=PL8_ASIpg7ciEUAOG8AuplsA7oa1FjKBZE)
写経して実行してみたところ、
「identifier」を付け忘れています。と表示され、困っています。

発生している問題・エラーメッセージ

「12行目」で記述エラーを発見しました。 「identifier」を付け忘れています。

該当のソースコード

c言語

1#include <stdio.h> 2#include <string.h> 3#include <conio.h> 4 5#define FIELD_WIDTH 12 6#define FIELD_HEIGHT 22 7 8char field[FIELD_HEIGHT][FIELD_WIDTH]; 9 10void main(){ 11 memset(field, 0, sizeof(field)); 12 for (int i = 0; i < FIELD_HEIGHT; i++) 13 field[i][0] = 1; 14 15 for (int i = 0; i < FIELD_HEIGHT; i++) 16 for (int j = 0; j < FIELD_WIDTH; j++) 17 printf(field[i][j]?"■":" "); 18 _getch(); 19}

補足情報(FW/ツールのバージョンなど)

開発環境はEasyIDECです。

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

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

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

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

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

LouiS0616

2019/06/30 11:37 編集

開発環境は何でしょうか。ひょっとしてEasyIDECだったりします?
Mu03

2019/06/30 11:41

おっしゃる通り、EasyIDECを使用しました。
guest

回答3

0

ベストアンサー

これ↓だとどうです?

C

1#include <stdio.h> 2#include <string.h> 3#include <conio.h> 4 5#define FIELD_WIDTH 12 6#define FIELD_HEIGHT 22 7 8char field[FIELD_HEIGHT][FIELD_WIDTH]; 9 10void main() { 11 int i, j; /* ここで定義 */ 12 memset(field, 0, sizeof(field)); 13 for (i = 0; i < FIELD_HEIGHT; i++) 14 field[i][0] = 1; 15 16 for (i = 0; i < FIELD_HEIGHT; i++) 17 for (j = 0; j < FIELD_WIDTH; j++) 18 printf(field[i][j]?"■":" "); 19 _getch(); 20}

投稿2019/06/30 11:45

episteme

総合スコア16614

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

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

Mu03

2019/06/30 11:51

解答ありがとうございます! 教えていただいたように記述をしたら実行することができました! 他の方も教えてくださったのですが、c言語だとfor内で宣言することができないのですね... 非常に勉強になりました、ありがとうございます!
episteme

2019/06/30 13:02

最近のCならできるんですけどねー
Mu03

2019/06/30 13:06

なるほど、私の使っている開発環境が古いのですね。 これ以降も不便に思うことが多かったら、新しいものを探そうと思います!
SaitoAtsushi

2019/06/30 14:44

情報を補足しておきますと「最近の」というのは 1999 年です。 for 文の初期化のところで変数の宣言を書けるようになったのは C の言語仕様の 1999 年の改定 (便宜上 C99 と呼ばれることが多いです。) によるもので、 2019 年の現代でその改定に追従していないような処理系というのは端的に言ってかなりの時代遅れです。
guest

0

Cだと、for(int i=0;のようなfor括弧内での宣言は出来ません。宣言int iをを外に出すか、C++としてコンパイルしましょう。

投稿2019/06/30 11:43

otn

総合スコア84421

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

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

Mu03

2019/06/30 11:46

解答ありがとうございます! C言語だとfor内での宣言ができないのですね... 勉強になりました!
LouiS0616

2019/06/30 11:48

C99以降なら可能では。
otn

2019/06/30 12:01

すいません。20年以上前の知識です。
Mu03

2019/06/30 13:09

少なくとも私の開発環境ではfor内での宣言は出来なかったので、とても参考になりました。 他の方も、最近のc言語ではできるようになったと教えてくださりありがとうございます! これ以降も不便に思うことが多ければ、新しい開発環境を用意しようと思います。
otn

2019/06/30 13:18

gccなら -std=c99 というオプションです。
thkana

2019/06/30 14:07

EasyIDECが内部的に使っているTiny Cが古いのでそうなります。C99ってのは1999年版のCという意味なので...いや本当に古い。(といいながらWindowsでメジャーなVisual StudioのCも、2013年版になってやっとC99に対応したとかいう事実もあったりしますが) Tiny C自体のちょっと新しいバージョンも出ていて、C99にもある程度対応していますが( https://bellard.org/tcc/ ) for文のカッコ内での変数定義には対応していないようです。 いろいろ特徴もあって面白いコンパイラではあるのですが、ShiftJis文字列(の0x5c問題)に対応していなかったりして、初心者が使うにはちょっとどうかなぁ、と思う面もなくはないです。 それと、EasyIDECが広告出す機構が古くてエラーになっているのも放置されてたり、で私はEasyIDECはオススメできない、と思っています。
guest

0

clangのエラーメッセージです。
t4.c:10:1: error: 'main' must return 'int'
void main(){
^~~~
int

main()の復帰値はintにしてください。

投稿2019/06/30 11:42

cateye

総合スコア6851

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

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

thkana

2019/06/30 14:20

JIS-x3010 日本語版のC規格(C99相当)によれば、Cのエントリー関数のシグニチャは ---引用--- − 返却値の型 int をもち仮引数をもたない関数 int main(void) { /*... */ } − 二つの仮引数をもつ関数(仮引数は,これらが宣言された関数に対して局所的であるため,どのよう な名前を使用してもよいが,ここでは argc 及び argv とする。) int main(int argc, char * argv[]) { /*... */ } − 上に掲げた二つの方法のいずれかと等価な方法 − 上に掲げた三つの方法のいずれでもない処理系定義の方法 ---引用終わり--- となっています。最後のやつがとてつもなく強力で、質問者の処理系においてはvoid main()が許されているので、決して間違いではない、ということになってしまうのです。(それを推奨するかどうかは別ですけれど、実際、void main()を通すコンパイラのほうが多いような) 最近の改訂版はちゃんと見ていないのですけど、なにか変わっているかしら?
cateye

2019/06/30 16:01

なるほど、勉強になりました。 有難うございます。確認してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問