C++で通っていたコンパイルがCで通らなくなった

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アバター
馬場自由
記事: 15
登録日時: 12年前

C++で通っていたコンパイルがCで通らなくなった

#1

投稿記事 by 馬場自由 » 12年前

表題のことで困っています。
コードとエラー内容は次の通りです

コード:

#ifndef UTILH
#define UTILH


#ifdef __cplusplus
extern "C" {
#endif

#include <stdio.h>
#include <string.h>
#include <stdlib.h>


/*===================================================================
  EXPORT FUNCTIONS
===================================================================*/
#if defined(_VisualStudio)
  #define  EXPORT  __declspec(dllexport)

// MinGW , Linux
#else
  #define EXPORT
#endif	

/*===================================================================
 VARIABLE MACRO
===================================================================*/

#define MAX_NUM_OF_LINES_IN_FILE 1024

// return values
#define OK 255

// typdef unsigned value
typedef unsigned int uint;
typedef unsigned char uchar;
typedef unsigned short ushort;

// boolean value
#ifndef __cplusplus
  #define true 1
  #define false 0
  #define char bool
#endif

// if MinGW or VS : able to use <windows.h>
#if defined( _MinGW ) || defined( _VisualStudio )
  #define _Windows 1
#endif

/*===================================================================
 ASSERTION
===================================================================*/

// static assert
#ifdef __cplusplus
  template <bool> struct StaticAssert;
  template<>struct StaticAssert<true>{typedef int t;};
  #define STATIC_ASSERT(exp) typedef StaticAssert<(exp)>::t \
     STATIC_ASSERTION_ERROR##__LINE__;
#endif

// assert
# ifdef _RELEASE_MODE
  #define ASSERT(a)
# else
  #define ASSERT(a) \
    if((a)) {\
      printf("error:%s %d\n" , __FILE__ , __LINE__ );\
      exit( EXIT_FAILURE );\
    }
# endif

/*===================================================================
 FILE
===================================================================*/

// get file line
EXPORT int GetFileLine( const char *fname );

// get file size
EXPORT int GetFileSize( const char *fname );

// output log file
EXPORT void OutPutLog( char* data , unsigned int size );

// get file raw data
EXPORT const char*GetFileData(const char *fname );

/*===================================================================
 MEMORY
===================================================================*/

// get array number
#define NUM_ARRAY(array) (sizeof(array)/sizeof(array[0]))

// safe release
#define RELEASE(p) if((p)) { delete (p); (p) = NULL; }
#define FREE(p) if((p)) { free((p));(p) = NULL; }

/*===================================================================
 STRING
===================================================================*/

// get string with replaced
EXPORT const char *Replace( const char *str , char from , char to);

// array clear
EXPORT void ZeroClear( char *buf );


/*===================================================================
 DEBUG PRINT
===================================================================*/
#ifdef _DEBUG_MODE
  #define PUTS(a) puts(a);
#else
  #define PUTS(a)
#endif

void LogTxt(const char *fname , const char *errtxt);

/*===================================================================
 DIRECTORY
===================================================================*/

EXPORT int Mkdir(const char *dname );

/*===================================================================
 TIME
===================================================================*/

EXPORT void Now(char *buf);

#ifdef __cplusplus
} // end extern
#endif

#endif // end UTILH
コンパイル方法

gcc -c Util.c -D_Linux (CentOS6上で実行)

エラー内容

In file included from Util.c:1:
Util.h:105: error: expected ‘;’, ‘,’ or ‘)’ before ‘*’ token
Util.h:108: error: expected ‘;’, ‘,’ or ‘)’ before ‘*’ token
Util.h:111: error: expected ‘)’ before ‘*’ token
Util.h:114: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘*’ token
Util.h:132: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘*’ token
Util.h:135: error: expected ‘)’ before ‘*’ token
Util.h:147: error: expected ‘;’, ‘,’ or ‘)’ before ‘*’ token
Util.h:153: error: expected ‘;’, ‘,’ or ‘)’ before ‘*’ token
Util.h:159: error: expected ‘)’ before ‘*’ token
In file included from Util.c:3:
/usr/include/time.h:147: error: expected ‘:’, ‘,’, ‘;’, ‘}’ or ‘__attribute__’ before ‘*’ token
/usr/include/time.h:199: error: expected ‘)’ before ‘*’ token
/usr/include/time.h:217: error: expected ‘)’ before ‘*’ token
/usr/include/time.h:255: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘*’ token
/usr/include/time.h:258: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘*’ token
/usr/include/time.h:266: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘*’ token
/usr/include/time.h:270: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘*’ token
/usr/include/time.h:276: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘*’ token
/usr/include/time.h:283: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘*’ token
In file included from Util.c:10:
/usr/include/sys/stat.h:211: error: expected ‘;’, ‘,’ or ‘)’ before ‘*’ token
/usr/include/sys/stat.h:240: error: expected ‘;’, ‘,’ or ‘)’ before ‘*’ token
/usr/include/sys/stat.h:265: error: expected ‘;’, ‘,’ or ‘)’ before ‘*’ token
/usr/include/sys/stat.h:286: error: expected ‘;’, ‘,’ or ‘)’ before ‘*’ token
/usr/include/sys/stat.h:293: error: expected ‘;’, ‘,’ or ‘)’ before ‘*’ token
/usr/include/sys/stat.h:305: error: expected ‘;’, ‘,’ or ‘)’ before ‘*’ token
/usr/include/sys/stat.h:323: error: expected ‘;’, ‘,’ or ‘)’ before ‘*’ token
/usr/include/sys/stat.h:330: error: expected ‘;’, ‘,’ or ‘)’ before ‘*’ token
/usr/include/sys/stat.h:338: error: expected ‘;’, ‘,’ or ‘)’ before ‘*’ token
/usr/include/sys/stat.h:345: error: expected ‘;’, ‘,’ or ‘)’ before ‘*’ token
/usr/include/sys/stat.h:352: error: expected ‘;’, ‘,’ or ‘)’ before ‘*’ token
/usr/include/sys/stat.h:359: error: expected ‘;’, ‘,’ or ‘)’ before ‘*’ token
/usr/include/sys/stat.h:366: error: expected ‘;’, ‘,’ or ‘)’ before ‘*’ token
/usr/include/sys/stat.h:403: error: expected ‘;’, ‘,’ or ‘)’ before ‘*’ token
/usr/include/sys/stat.h:405: error: expected ‘;’, ‘,’ or ‘)’ before ‘*’ token
/usr/include/sys/stat.h:407: error: expected ‘;’, ‘,’ or ‘)’ before ‘*’ token
/usr/include/sys/stat.h:444: error: expected ‘;’, ‘,’ or ‘)’ before ‘*’ token
/usr/include/sys/stat.h:447: error: expected ‘;’, ‘,’ or ‘)’ before ‘*’ token

以上です。よろしくお願いします。

かずま

Re: C++で通っていたコンパイルがCで通らなくなった

#2

投稿記事 by かずま » 12年前

43行目が間違っています。
#define char bool

#define bool char
にしてみてください。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前
住所: 東海地方
連絡を取る:

Re: C++で通っていたコンパイルがCで通らなくなった

#3

投稿記事 by softya(ソフト屋) » 12年前

C99だと
#include <stdbool.h>
があればbool型が使えます。
--std=c99もお忘れなく。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
馬場自由
記事: 15
登録日時: 12年前

Re: C++で通っていたコンパイルがCで通らなくなった

#4

投稿記事 by 馬場自由 » 12年前

>かずまさん

ありがとうございます、おかげ様で無事解決できました。

>softyaさん

stdbool.hというヘッダは知りませんでした、情報ありがとうございます。

閉鎖

“C言語何でも質問掲示板” へ戻る