【掲示板ご利用上の注意】

 ※題名は具体的に!
 ※学校の課題の丸投げ禁止!
 ※ソースの添付は「HTML変換ツール」で字下げ!
 ※返信の引用は最小限に!
 ※環境(OSとコンパイラ)や症状は具体的に詳しく!
 ※返信付き投稿の削除は禁止!
 ※マルチポスト(多重投稿)は慎んで!

 詳しくはこちら


本当はこんなに大きく書きたくはないのですが、なかなか守っていただけなくて…。
 守ってくださいね。お願いします。(by管理人)

C言語ソース⇒HTML形式ツール掲示板2こちら


管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.23272

#defineの限界
投稿者---あきき(2005/09/24 01:51:12)


"_"を"-"に#defineしたいのですが、ヘッダーファイルやマクロで"_"を使用していたと思います。できないのでしたら、他に使用できないkeywordにどういうのがあるのでしょうか?


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:#defineの限界 23275 RAPT 2005/09/24 02:22:45
<子記事> Re:#defineの限界 23276 まきじ 2005/09/24 02:30:15


No.23275

Re:#defineの限界
投稿者---RAPT(2005/09/24 02:22:45)


#define は 指定した「識別子」を置き換えます。
ソース中を走査する際、識別子以外は対象外です。

例えば、
  #define THE A
  THERE
とあったとき、「THERE」は「THERE」のままで、決して「ARE」になる訳ではありません。

識別子の命名規則は、英数字かアンダーバー(_)が1つ以上含まれ、
先頭文字が数字文字以外であり、その長さの最大値は環境依存です。



#include <stdio.h>
#define DEF_VALUE_1 10
#define _ -
#define DEF_VALUE_2 3

int main(void)
{
    int a = DEF_VALUE_1 _ DEF_VALUE_2;
    printf("%d\n", a);
    return 0;
}

> int a = DEF_VALUE_1 _ DEF_VALUE_2;
これは、下記のように展開されます。
int a = 10 - 3;


なお、リテラル中の文字を置換することはできません。
リテラルは識別子ではないからです。

#include <stdio.h>
#define _ -

int main(void)
{
    char a[] = "1_2_3";
    printf("%s\n", a);
    return 0;
}



この投稿にコメントする

削除パスワード

No.23279

Re:#defineの限界
投稿者---あきき(2005/09/24 09:40:27)


#define は 指定した「識別子」を置き換えます。
ソース中を走査する際、識別子以外は対象外です。識別子の命名規則は、英数字かアンダーバー(_)が1つ以上含まれ、
先頭文字が数字文字以外であり、その長さの最大値は環境依存です。
なお、リテラル中の文字を置換することはできません。
リテラルは識別子ではないからです。
では、Cでは"-"の使用は認められていないと聞いています(不確実です)。
ならば、"-"の部分を"_"と#defineする事は可能ですか?


#defie - _

int main( void )
{
int read-rtn;//ここが、read_rtnに#defineされるのでしょうか

} 


この投稿にコメントする

削除パスワード

No.23280

Re:#defineの限界
投稿者---si(2005/09/24 10:44:36)


>int read-rtn;//ここが、read_rtnに#defineされるのでしょうか

されません。コンパイルすれば分かります。
『read 引く rtn』 と理解されます。
皆さんのレスを良く読んで下さい。  


この投稿にコメントする

削除パスワード

No.23282

Re:#defineの限界
投稿者---まきじ(2005/09/24 11:40:52)


>では、Cでは"-"の使用は認められていないと聞いています(不確実です)。
>ならば、"-"の部分を"_"と#defineする事は可能ですか?

#define 識別子
なので "-" は 文字列リテラルで識別子ではないので使用不可。
- は、識別子の名前に含められないので使用不可。


この投稿にコメントする

削除パスワード

No.23283

Re:#defineの限界(解決)
投稿者---あきき(2005/09/24 13:28:10)


>#define 識別子
>なので "-" は 文字列リテラルで識別子ではないので使用不可。
> - は、識別子の名前に含められないので使用不可。

そうでした。RAPTさんからアドバイスを受けたばかりでした。(;^^

"#define は 指定した「識別子」を置き換えます。
ソース中を走査する際、識別子以外は対象外です。
識別子の命名規則は、英数字かアンダーバー(_)が1つ以上含まれ、
先頭文字が数字文字以外であり、その長さの最大値は環境依存です。"

みなさんのおかげで#defineマクロについて勉強になりました。ありがとうございます。


この投稿にコメントする

削除パスワード

No.23290

Re:#defineの限界(解決)
投稿者---shu(2005/09/24 14:47:24)


>そうでした。RAPTさんからアドバイスを受けたばかりでした。(;^^

茶化さない。

>みなさんのおかげで#defineマクロについて勉強になりました。ありがとうございます。

垂れ流された情報を、只眺めてるだけじゃ勉強になりません。

意味合いは少し違いますが、「マルチポスト」な感じもします。
一つのスレッドについて、まともに読めていない状態で、新しい質問しても頭に入らないでしょ。
このスレッドに限らず、あききさん発のスレッドを見返してみると、消化不良をおこしてます。


結局、"-"を"_"に変換することは出来ましたか?
それとも、あきらめたのですか?

変換したいだけなら、エディタの置換機能を使うとか、
変換するためだけの、小さなプログラムを作るとか、
方法はいろいろとあります。

無理に#defineで出来ないことを、#dfineでやることもないです。


この投稿にコメントする

削除パスワード

No.23295

shuって人
投稿者---偉そうな人へ(2005/09/25 16:05:37)


>>そうでした。RAPTさんからアドバイスを受けたばかりでした。(;^^
>
>茶化さない。
>
>>みなさんのおかげで#defineマクロについて勉強になりました。ありがとうございます。
>
>垂れ流された情報を、只眺めてるだけじゃ勉強になりません。
>
>意味合いは少し違いますが、「マルチポスト」な感じもします。
>一つのスレッドについて、まともに読めていない状態で、新しい質問しても頭に入らないでしょ。
>このスレッドに限らず、あききさん発のスレッドを見返してみると、消化不良をおこしてます。
>
>
>結局、"-"を"_"に変換することは出来ましたか?
>それとも、あきらめたのですか?
>
>変換したいだけなら、エディタの置換機能を使うとか、
>変換するためだけの、小さなプログラムを作るとか、
>方法はいろいろとあります。
>
>無理に#defineで出来ないことを、#dfineでやることもないです。
この人偉そうね
人から嫌われそうね


この投稿にコメントする

削除パスワード

No.23296

Re:shuって人
投稿者---まきじ(2005/09/25 16:18:51)


>この人偉そうね

具体的にどう「偉そう」なのでしょうか?

あと、引用は必要な部分だけにしましょう。
全部引用するのは、嫌われる原因となります。

# レスしてくれるのであれば、おしゃべり掲示板でお願いします。


この投稿にコメントする

削除パスワード

No.23276

Re:#defineの限界
投稿者---まきじ(2005/09/24 02:30:15)


>"_"を"-"に#defineしたいのですが

#define "_" "-" としたいという事でしょうか?
"_" は識別子ではなく、文字列リテラルですよ。

#include<stdio.h>

#define _ -

int main(void){

    int hoge_a = 10;
    int hoge_b = 4;
    
    printf("%d - %d = %d\n", hoge_a, hoge_b, hoge_a - hoge_b);
    
    return 0;
}
こういう事かな?


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧