アプリ版:「スタンプのみでお礼する」機能のリリースについて

C言語です。

Effective C++か何かで読んだ
const int hoge = 3;
const char *bar = "HOGEHOGE";
などを使用しようと思ったのですが、
C言語ではコンパイルする際に、
「関数の外では定数は宣言できません」??
のようなエラーが出てしまいました。

そこでこれらを使用するのは諦めて、
#define~を使って定数を使用しました。
(上記のようなエラーが出てしまうのは、
C言語の仕様上、文法がおかしいからだと
思います。そもそもC++に関する本に
載ってるtipsだし^^;)


#defineを使用するように修正して、コンパイルする際に、
既存のソース上のマクロ定義(#define~)と名前が重複するものが
いくつか見つかり、修正に手間がかかりました。

マクロ定義なので、スコープという概念は
適用されないと思うので、既存のソースと新規のソースで
マクロ定義がバッティングしないようにする策としては
どのようなものがあるでしょうか?

今のところ思いつくものとしては以下です。
・新規のソースに関するキーワードをプリフィックスとして使用する
・新規のソースの末尾で#undefをする。(これは試してないので有効か
 どうか自信がありません。)

他に何か有効な策がありましたら教えてください。
よろしくお願いいたします。

A 回答 (2件)

ANSI Cでは constは規定されていますし現状の殆どのCコンパイラが実装している筈です。


使用しているコンパイラが古すぎるという事はありませんか?

下記ソースは何のエラーにもならず実行可能です。
// --- test1.c -----
#include <stdio.h>

const int hoge = 3;
const char *bar = "HOGEHOGE";

int main(int argc,char *argv[])
{
printf("hoge=%d bar=%s\n",hoge,bar) ;

return 0 ;
}
    • good
    • 0

いくらなんでも


「関数の外では定数は宣言できません」
なんてことはありえません. お使いの C コンパイラ及び実際のエラーメッセージと関連するソースを「解釈しようとせず一字一句そのまま」載せられませんか?

この回答への補足

たしかにcodepadで実行しても、エラーが
出ません。。。
エラーが出たのはmakeファイルを使用していたので、
makefileの中で何かエラーが出るようなオプションを
使用していたのかもしれません。

現在使用している環境からは参照できない位置にその
ファイルが存在していますので、後日補足いたしますm(..)m

補足日時:2009/01/04 12:00
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!