
No.2ベストアンサー
- 回答日時:
列挙体の定義は、#ifndefや#defineなどの前処理指令を解決した後で意味解析が行われます。
ですから、#ifndef指令が解決される段階では列挙定数INDEX_ENDは特定の意味を持つ存在としてはコンパイラに認識されません。結果として、INDEX_ENDはマクロとして定義されていない識別子ですので、#define INDEX_END 10が有効になります。ちなみに、#if INDEX_ENDとした場合、INDEX_ENDは定義されていないマクロ名ですので0として評価されることになります。
参考URL:http://portable-c.jugem.jp/?eid=7
No.3
- 回答日時:
暗黙の規則というか言語仕様書に書かれているかと。
C++ならISO/IEC14882:2003 16.1 Conditional inclusionあたり。
[... if the identifier is currently defined as a macro name ...]
「macro nameとして定義されてるか否か」が条件です。
# C言語は調べてませんがたしか一緒だったはず。
No.1
- 回答日時:
投稿を元にして、ちょっとしたサンプルを作ってみました。
実行結果に基づいて判断してみてください。
#include <stdio.h>
enum {
INDEX_A = 0,
INDEX_B,
INDEX_C,
INDEX_END
};
#ifndef INDEX_END
#define INDEX_END 10
#endif
int main(void)
{
printf("%d %d %d %d\n", INDEX_A, INDEX_B, INDEX_C, INDEX_END);
return 0;
}
(注)インデントのため、全角空白を使っています。
回答ありがとうございます。
残念ながら、実行結果が正しいのかどうかを疑っているところです
ので、そこからは判断できません。
具体的には、リアルタイムOSのカーネルソースをコンパイルしよう
として、生成情報の中のリソース使用数のデータ名としてenumで定
義した名前を与えてみたところ、#ifdefの対象外のため、ユーザ未
定義として初期値で上書きされてしまったが、それが基本仕様なの
か不具合の類なのか判断がつかないという状況です。
コンパイラのマニュアルの言語仕様としては記述がなかったので、
暗黙でそういう規則があるのかどうか知りたいです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Ruby No route matches [GET] "/posts/5/destroy" 1 2022/03/24 13:00
- その他(プログラミング・Web制作) .htaccessファイルの修正がこれで問題ないかどうか 1 2022/04/21 08:42
- Visual Basic(VBA) ExcelVBAで、index、match関数を使用して、指定範囲に出力したい 3 2022/10/18 21:53
- Visual Basic(VBA) Vbaで数式をポーランド記法に変換するコードを作って実行しようとするとフリーズします。 1 2022/05/24 17:53
- その他(プログラミング・Web制作) python pandas 行ごとに列名(列番号)を指定して抽出したい 1 2023/05/26 13:47
- Visual Basic(VBA) RemoveDuplicatesメソッドについて教えてください。 シート1にシート2から値をもってく 1 2023/02/28 22:43
- Ruby pandasでsqlite3にテーブル作成・追加・読み出しでindexの取り扱い方教えてください 5 2023/03/08 09:57
- 洋楽 2000年以降の洋楽で皆様の好きな曲を1曲だけ教えてください 1 2022/09/10 21:52
- ホームページ作成・プログラミング Adobe DreamweaverでのサイトのFTP 2 2023/03/05 11:55
- Visual Basic(VBA) 集めたシートのシート名を変更したい。 下記のコードでサブフォルダにあるファイルのSheet3を集めて 6 2022/08/23 10:38
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
DLLファイルの逆コンパイラにつ...
-
Windows Formアプリからコンソ...
-
VisualStudio2022でC言語プログ...
-
大量のデータを読み込んで表示...
-
gccを行ってもexeファイルが生...
-
VisualStudioでC++クラスを追加...
-
ディスプレイの解像度とマウス...
-
逆コンパイルと逆アセンブルの...
-
10進数からN進数に変換するプロ...
-
プログラミングの課題がわから...
-
写真のプログラムは、1からnま...
-
C言語でファクト関数を使わずに...
-
【C言語】全角文字の配列を、全...
-
MACで動く実行ファイルをWindow...
-
C言語のことです。写真(見にく...
-
今ってプログラミング言語は何...
-
システムエンジニアの適正について
-
c言語
-
C言語について。
-
擬似コード
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エラー(型が一致しません。)...
-
VB6でユーザー定義型がNothing...
-
LRESULTとHRESULT
-
#define 文
-
TextChangeイベントが発生しない
-
ifdefとenum
-
クラス内に自作のイベントを定...
-
PHP + MySQL で登録時に重複チ...
-
時間差を取得結果を求めるには
-
アクティブなウィンドウのみ、...
-
callbackってなんですか。
-
【javaScript】KeyboardEventで...
-
プレロードイメージについて
-
Javascriptのreturnについての...
-
char[]とchar*
-
SetTimer関数について
-
isLoading:Boolean = trueの使い道
-
PHP requireの後にJS実行
-
functionのパラメータの渡し方...
-
【JavaScript】イベント伝播の...
おすすめ情報