
下記のようなプログラムがありました。
同じシンボルに複数の型定義がある場合、単に後の定義が有効になるだけですか。
何のためにこんなことをやっているのか分からない。
(多分以下でスペースが表示されなくて見にくいと思いますが)
#ifdef __cplusplus
#define _WCHART
typedef wchar_t _Wchart;
typedef wchar_t _Wintt;
#else
typedef __WCHAR_T_TYPE__ _Wchart;
typedef __WCHAR_T_TYPE__ _Wintt;
#endif
No.3ベストアンサー
- 回答日時:
>typedef wchar_t _Wchart;
>typedef wchar_t _Wintt;
>と同じような 2文があるのですが、単に前者は無視されるだけですよね。
その場合は、両方とも有効になります。
以下のソースで確認ください。
# include <stdio.h>
typedef short int shortA;
typedef short int shortB;
int main()
{
shortA a = 10;
shortB b = -20;
printf("%d:%d\n",a,b);
return 0;
}
-------------------------------
実行結果
10:-20
では、なぜ、わざわざ2つを定義するかというと、
_Wchartとして使いたい場合と_Winttとして使いたい場合があるから
としか言えまえん。
No.4
- 回答日時:
ちょっと今確認できてないけど, これはまずいんじゃないかなぁ. 少なくとも, ユーザープログラムではすべきでないと思う.
もっとも, __WCHAR_T_TYPE__ なんていう非標準のものをしれっと使ってることからすると
特定の処理系べったり (別の処理系のことなんか考えてないもんね)
なプログラムなのかもしれんけど.... あとで対応する人を不幸にしなきゃいいけど....
No.1
- 回答日時:
#ifdef XXX
(A)
#else
(B)
#endif
の形は
XXXというマクロがすでに定義済みであれば(A)を、定義されていなければ(B)を実行するというプリプロセッサ構文です。
当然ですが(A)と(B)はいずれか一方しか実行されません。
今回の場合は__cplusplusが処理系で定義されているか否かで変数の型を変えます。C++のコンパイラでは__cplusplusが処理系で定義されているので前者を実行し、Cのコンパイラでは__cplusplusが定義されていないので後者が実行されます。
(A) の中が
typedef wchar_t _Wchart;
typedef wchar_t _Wintt;
と同じような 2文があるのですが、単に前者は無視されるだけですよね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教えるわが家の防犯対策術!
ホームセキュリティのプロが、家庭の防犯対策を真剣に考える 2組のご夫婦へ実際の防犯対策術をご紹介!どうすれば家と家族を守れるのかを教えます!
-
算術右シフトの結果が1/2になる証明がわからない
C言語・C++・C#
-
プログラムで行き詰まっています。分かる方教えていただきたいです。 a[i]と、*(a+i)は、同じに
C言語・C++・C#
-
家庭用家電などのマイコンのOSにはTronというものが多く使われているそうですが
C言語・C++・C#
-
4
C言語の勉強をしたいのですが オススメのエディタなんですか? Windowsです。
C言語・C++・C#
-
5
C言語についてです。 void lcg(int *x) { if (n == 0) { return
C言語・C++・C#
-
6
C初心者です。累乗と除算の併用について
C言語・C++・C#
-
7
Cプログラムの動作
C言語・C++・C#
-
8
C言語でプログラムを書いたのですが、うまくいかないので分かる方教えて頂きたいです。 左にビットを回転
C言語・C++・C#
-
9
初心者はIDE使わないほうが良くないですか?
C言語・C++・C#
-
10
プログラミング C言語 意味がわからないので教えてほしいです...
C言語・C++・C#
-
11
プログラミング C言語 課題でプログラムを書いたのですがうまくいきません...
C言語・C++・C#
-
12
マウスの左クリックでカーソルを移動(配置)させたいのですが、できません。設定方法教えてください。 C
C言語・C++・C#
-
13
円の面積を求めるプログラミングについて質問です。
C言語・C++・C#
-
14
CPUの言語処理系の種類はそんなに多くないですか
C言語・C++・C#
-
15
C言語 y = func( 3*x ) が良く分からない
C言語・C++・C#
-
16
プログラミングの質問です。 #include <stdio.h> int x=0,y=0; void
C言語・C++・C#
-
17
C言語のプログラミングについて教えてください!
C言語・C++・C#
-
18
プログラミング初心者がまず始めに勉強すること・やることは、なんでしょうか?
C言語・C++・C#
-
19
皆さんの個人的に使いやすいエディターを教えてください。 また、簡単な理由もあると助かります。
C言語・C++・C#
-
20
プログラミング C言語
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
人気Q&Aランキング
-
4
東芝のDynabookなのですがアン...
-
5
Cプログラム 行列
-
6
C言語について質問です。
-
7
Windows10 32/64bitアプリケー...
-
8
誰かこのC言語のソースコードが...
-
9
Enterキーを押されたら次の処理...
-
10
C言語エラーについて
-
11
C言語、自己参照構造体のプログ...
-
12
c# 文字列の最後から1文字削除...
-
13
この実行結果が分かりません
-
14
複数桁10進数の*桁目だけを抽出...
-
15
文字列内の数字削除
-
16
float型とdouble型の変数の違い...
-
17
*をユーザーが入力した数字の数...
-
18
エラーの意味は? Lvalue req...
-
19
C言語初心者の質問失礼します。
-
20
これのC言語が分かりません
おすすめ情報