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

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

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

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

Q&A

解決済

3回答

19285閲覧

言語:C メイク中に構文エラーが発生、困っています。

wAsabi1107

総合スコア11

C

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

0グッド

0クリップ

投稿2017/04/21 10:36

###前提・実現したいこと
C言語で開発中、メイクの最中に下記エラーが出て業務が滞り、困っています。
現在は自宅から書き込んでいます。

やりたかったことはデバッグで、その一環として構造体メンバのアドレスを表示させたかったのですが、上手くいきませんでした。
初歩的な質問で申し訳ないのですが・・・

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

parse error before string constant /* 構文エラー? */

###該当のソースコード

C

1各種プリプロセッサ命令の記述 2345/* 文法は原文そのままです */ 6printf("debug.c Line999 : hoge1 = %p\n", &struct.tbl[0].hoge1); 78910各種プリプロセッサ命令の記述 終了 11 12各種関数の記述 13 14()

###試したこと
%pを%xに書き換え → 同じエラー文
hoge1の型がlong型なのでキャスト → printf("略", (long)&struct.tbl[0].hoge1); →
やはり同じエラー文

###補足情報(言語/FW/ツール等のバージョンなど)
文法でなく構文エラーなので、記述している場所がそもそも問題ありなのか・・・?と思い返しています。
コンパイルにはTornadoを使用しています。

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

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

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

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

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

guest

回答3

0

こんにちは。

まず、struct.tbl[0].hoge1はまずいです。
structはキーワードなので変数名に使えないですから。
しかし、そのままでもparse errorにはならないので、真の原因は分かりませんでした。
提示されていない部分に何か問題があるのかも知れません。

とりあえず修正してみました。
MinGW 5.4.0(gcc 5.4.0のWindows用)で下記は通ります。

C

1#include <stdio.h> 2 3typedef struct 4{ 5 long hoge1; 6} Hoge; 7 8Hoge tbl[10]; 9 10int main() 11{ 12 printf("debug.c Line999 : hoge1 = %p\n", &tbl[0].hoge1); 13}

投稿2017/04/21 11:03

編集2017/04/21 13:56
Chironian

総合スコア23272

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

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

wAsabi1107

2017/04/26 09:22

回答ありがとうございました!
guest

0

%p が処理系依存なのでそこらへんに何かあるのかな…?

投稿2017/04/25 04:11

WoodenHamlet

総合スコア306

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

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

wAsabi1107

2017/04/26 09:21

回答ありがとうございました!
guest

0

自己解決

返事が遅くなってしまい申し訳ありません。
皆さん、回答ありがとうございました。

あの後自宅で検証したところ(コンパイラはgcc)、無事解決法が分かりました。
我ながら呆れる結果なのですが・・・

C

1#include <stdio.h> 2 3 printf("test\n"); /* エラー箇所! */ 4 5int main(void) 6{ 7 int hoge = 0x12345678; /* 0xで始まるので16進数 */ 8 unsigned char *hoge_p = (unsigned char*)&hoge; /* hogeの先頭アドレスをchar型ポインタにキャストし、hoge_pにセット */ 9 10 printf("%x\n", hoge_p[0]); /* %xはunsinged型引数を符号なし16進表記で出力、の意味 */ 11 printf("%x\n", hoge_p[1]); 12 printf("%x\n", hoge_p[2]); 13 printf("%x\n", hoge_p[3]); 14 15 return 0; 16}

###エラー文
byteorder.c:3:9: error: expected declaration specifiers or '...' before string constant

コンパイラーが違うためかエラーの内容は変わっていますが、printf()で発生している点は共通しています。
詰まる所、printfを関数内に入れず、プリプロセッサ命令や宣言と同列の位置に記述していたため発生したエラーのようです。

ご迷惑おかけしました。
そして改めて、回答ありがとうございました。

投稿2017/04/26 09:32

wAsabi1107

総合スコア11

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問