C言語の大先生ちょっときて

■ このスレッドは過去ログ倉庫に格納されています
1以下、5ちゃんねるからVIPがお送りします2018/12/12(水) 22:03:53.626ID:Fu95i+170
GCCの場合enumと#defineとconst定数はどれ使っても処理速度は変化無い?

2以下、5ちゃんねるからVIPがお送りします2018/12/12(水) 22:04:19.059ID:5zAZ5iuj0
まんこ!!!

3以下、5ちゃんねるからVIPがお送りします2018/12/12(水) 22:05:09.271ID:1OcUzRlI0
ごめんわかんない
Javaで例えて

4以下、5ちゃんねるからVIPがお送りします2018/12/12(水) 22:05:48.786ID:Ad9qwD5Nd
アセンブラ見るといいよ

5以下、5ちゃんねるからVIPがお送りします2018/12/12(水) 22:06:17.328ID:/JKbI5Ji0
#define < const ≒ enum

6以下、5ちゃんねるからVIPがお送りします2018/12/12(水) 22:06:35.087ID:Fu95i+170
>>4
どうやって見るの

7以下、5ちゃんねるからVIPがお送りします2018/12/12(水) 22:07:09.551ID:mB1C5Q4cp
>>5
まあそうだろうな

8以下、5ちゃんねるからVIPがお送りします2018/12/12(水) 22:07:36.899ID:GYIw+wJzM
cよりコボルやれよ

9以下、5ちゃんねるからVIPがお送りします2018/12/12(水) 22:08:47.662ID:Ad9qwD5Nd
-s のオプションつけると出てくるよ

10以下、5ちゃんねるからVIPがお送りします2018/12/12(水) 22:09:57.725ID:Fu95i+170
>>9
ありがとう

11以下、5ちゃんねるからVIPがお送りします2018/12/12(水) 22:11:46.559ID:mB1C5Q4cp
defineはコンパイル時に定義した値に置き換えられる
enumとconstはメモリに配置されるはず

12以下、5ちゃんねるからVIPがお送りします2018/12/12(水) 22:13:24.708ID:2Nyb8zch0
enumと#define(数値)は多分、即値になるから変わらない。
const定数はコンパイラで、
即値になったり変数(メモリアクセスが必要)になったりするから、
変数の場合はメモリアクセスが発生する分遅い。

#defien = enum ≦ const

13以下、5ちゃんねるからVIPがお送りします2018/12/12(水) 22:18:24.804ID:7LLUq98J0
enumは展開されるんじゃないかなぁ
と思ってグーグル先生に聞いたら

enum hoge {zero, one, two, ten=10 };
enum hoge a;

みたいな記述が出てきたから、メモリ配置っぽいね

14以下、5ちゃんねるからVIPがお送りします2018/12/12(水) 22:22:17.073ID:7LLUq98J0
JIS X3010-2003て、C99なの?
C11じゃなさそうだけど

15以下、5ちゃんねるからVIPがお送りします2018/12/12(水) 22:26:42.357ID:2Nyb8zch0
>>13

zero, one とかはただの値でしょ
zeroがメモリ配置されてるなら、&zeroとかできてもよさそうだし
enum hoge a;は変数宣言してるんだから、メモリに配置されて当然だけど

16以下、5ちゃんねるからVIPがお送りします2018/12/12(水) 22:27:42.029ID:7LLUq98J0
C99だった
C11以降はまだJIS規格になってないのね

17以下、5ちゃんねるからVIPがお送りします2018/12/12(水) 22:33:12.551ID:7LLUq98J0
>>15
#defineはプリプロセッサで定数に置き換えられる
constはメモリ上に配置される(データセグメントだっけか?)
enumは使い方によってプリプロセッサが処理する場合とメモリ上に配置される場合がある
こんな解釈で良いの?

18以下、5ちゃんねるからVIPがお送りします2018/12/12(水) 22:38:18.875ID:7LLUq98J0
中間ファイル見てみようと思ったら
Cコンパイラ入ってなかったわ

19以下、5ちゃんねるからVIPがお送りします2018/12/12(水) 22:43:40.760
>>12
デフィエンキタ━━━━(゚∀゚)━━━━!

20以下、5ちゃんねるからVIPがお送りします2018/12/12(水) 22:45:44.802ID:2Nyb8zch0
>>17
constとenumが逆
普通はconstはメモリ配置だけど、コンパイラの頭が良くて
ただの値として扱えるケースは、即値としてアセンブルされることがある
const変数のアドレスとかを使ってたら、値に置き換えられないのから、メモリ配置されるとは思う
アセンブルしてみればすぐわかるけどね

21以下、5ちゃんねるからVIPがお送りします2018/12/12(水) 22:47:26.051
そこまでチューニング考えるとかなに? 炊飯器の埋込プログラミングでもしてんの?

22以下、5ちゃんねるからVIPがお送りします2018/12/12(水) 22:54:12.924ID:DNB8bLd+M
>>21
それぐらい簡単だといいね

23以下、5ちゃんねるからVIPがお送りします2018/12/12(水) 22:55:24.707ID:7LLUq98J0
コンパイル後については仕様書にも定義されてなかったわ
てことで
コンパイラ依存で終了だな

■ このスレッドは過去ログ倉庫に格納されています