C言語なら俺に聞け 161

■ このスレッドは過去ログ倉庫に格納されています
2023/04/21(金) 14:05:20.18ID:rqj2HSDF0
!extend:checked:vvvvv:1000:512
(新スレ立ての際上記コマンドを2行書き込んでください)
C言語の話題のみ取り扱います C++の話題はC++スレへ
質問には最低限の情報(ソース/コンパイラ/OS)を付ける
数行で収まらないソースは以下を適当に使ってURLを晒す
https://paiza.io/
https://ideone.com/
http://codepad.org/

C17
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/n4713.pdf

C11
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1570.pdf

C23 最新ドラフト
https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3047.pdf

C99
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf
http://kikakurui.com/x3/X3010-2003-01.html

C FAQ 日本語訳
http://www.kouno.jp/home/c_faq/

JPCERT C コーディングスタンダード
https://www.jpcert.or.jp/sc-rules/

※前スレ
C言語なら俺に聞け 160
https://mevius.5ch.net/test/read.cgi/tech/1672191630/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
2023/09/04(月) 11:27:19.73ID:YGQMN8Uj0
試験用アセンブラはCASLだったっけ?
仮想環境で実在しない環境用言語だって。
2023/09/04(月) 12:00:00.02ID:p8KSFCIf0
>>610
char* はどのポインタからも変換できるし
元の型に変換すれば元のポインタと等しいことは保証される。
好ましいとは言えないが変換自体は問題ない。
void* 登場前には (void* 的なことが必要なら) char* が使われていたのは本当だ。

ポインタから整数へも型変換できることは明記されてる。
その結果は処理系定義だが、出来る環境でやるのが悪いわけじゃない。

char* やら int やらで扱ってたら間違った取り扱いをしやすいので
可能なら避けたほうがよくは有るが、 >>607 が言及した範囲には
明瞭に間違いと言えるものは見つけられない。
2023/09/04(月) 12:00:22.47ID:5denWoTkM
メモリが8bitって何も出来ないぞw
2023/09/04(月) 12:05:38.98ID:QM+pFggQM
アドレス範囲ではなくてデータ長が16ビットだったと思う
2023/09/04(月) 12:09:35.09ID:p8KSFCIf0
>>611
C の仕様上の用語では「バイト」が 8bit とは限らない定義になっている。
C の仕様で想定する必要がある程度にはそういう環境もあったのだろうし、
主流ではないにしても特殊というほどの感じでもなかったんちゃうか?

まあ「昔」をいつ頃に想定するかにもよるだろうけど。
2023/09/04(月) 12:24:06.96ID:p8KSFCIf0
>>612
たぶんだけど >>611 が言うのは CASL の前身である CAP-X のことじゃないか?
16bit 単位でアドレスが振られる設計だったはず。
2023/09/04(月) 14:04:31.55ID:F3cE7vUV0
7bitでアルファベットは表せてたしねぇ
文字集合で完結させてた RFC822
2023/09/04(月) 20:56:26.82ID:MxCwE5tq0
実際に1バイトが8ビットじゃないマシンで仕事してた人いる?
経験談を聞いてみたい
つらそう
2023/09/04(月) 21:41:24.34ID:TqSqVDXY0
何がつらいの?
2023/09/04(月) 22:35:30.73ID:yuyUlcPSd
UNIXとか基本9ビットが見え隠れしてる気がする
ファイルのパーミッション---rwxrwxとか
C数値のデフォルトが8進数とか(9ビットなら8進数3ケタでまとまりがいい)
2023/09/04(月) 22:55:40.14ID:ljnGjc/80
あれは9ビットだったのか
2023/09/04(月) 23:38:31.34ID:5denWoTkM
1バイト9bitとか完全に都市伝説だろ…
1ワード(レジスタ)が36bitとかはLispマシーンで使われたりしてたけどね
2023/09/06(水) 06:22:01.74ID:r3vK0XzD0
char が16bitの環境なら使ったことがある
2023/09/06(水) 07:02:16.45ID:Mh27mgbM0
そういうのってどんなCPUなの?
626デフォルトの名無しさん (ワッチョイ cfcf-ATpV)
垢版 |
2023/09/06(水) 09:37:16.14ID:EGh1VJfR0
とりあえずDSPなんかはそうでしょ
ワードマシンって言っちゃっていいか知らんけど、演算の速度をあげるためにワード幅を一番使いそうなビット数にして全部ワード単位でアクセスする設計にしてる
マニュアルにアドレス、char幅、int幅全部同じ何々ビットです注意してねみたいなのがご丁寧に書いてあったりするよ
627デフォルトの名無しさん (スフッ Sd1f-ETx6)
垢版 |
2023/09/06(水) 11:10:12.82ID:QkmiSIQgd
>>622
12bit以上必要だったはず
2023/09/06(水) 11:35:53.69ID:HQrnJbDO0
>>626
勉強になります
DSP触った事ないや
2023/09/06(水) 12:07:23.88ID:TIQAYIu40
>>626
float 幅に全揃え
アドレッシングもその単位なのでどうしても細かい粒度で個別に演算処理したい時はビットシフト併用
とかあったなぁ
2023/09/06(水) 15:01:09.34ID:7li0jtwXM
よく分からんけどDSPの内部レジスタって直接浮動少数点数が扱えるのか
floatは符号1bit + 指数部8bit +仮数部23bitの32bit長だっけ?
ただ浮動少数点数でビットシフトって面倒くさそう
2023/09/06(水) 19:43:08.02ID:r3vK0XzD0
外部とやり取りが多少面倒
ファイルや通信関連

データ列をcharに8bitずつ入れるか
ケチって8bit x2 入れるか
なんかを考える必要がある
2023/09/06(水) 19:43:50.40ID:r3vK0XzD0
私が使ったのはDSPでした
2023/09/06(水) 19:45:03.72ID:r3vK0XzD0
昔の大型計算機でcharが64bitのがあったはず
2023/09/06(水) 20:55:53.98ID:6iN9QRCz0
最初のUNIX開発マシン、DECの PDP-7 は18ビットだった
2023/09/07(木) 00:34:19.14ID:n7kUX99P0
C の仕様では正数型の表現にパディングビットの存在を許しているんだけど値の表現に関わらない無意味なビット(特殊なフラグとかに使うのか?)が存在するアーキテクチャも、見たことはないけど C の仕様で想定している以上はたぶんあるんだろうな……
2023/09/07(木) 00:34:47.43ID:n7kUX99P0
誤植
正数→整数
2023/09/07(木) 08:06:18.17ID:YzioMxaL0
>>635
小数なら身近にあるね
2023/09/07(木) 12:49:26.03ID:6eZunc+30
隣で寝ている
639デフォルトの名無しさん (ワッチョイ 0f01-e7Rb)
垢版 |
2023/09/16(土) 10:51:51.48ID:S5cqLcA00
T,o,k(迷惑という方は←をあぼーんしてください。)

更に家族友人にも教えて加えて¥4000×人数をGETできます
https://i.imgur.com/dGH5X8i.jpg
640デフォルトの名無しさん (アウアウウー Sa53-HRje)
垢版 |
2023/09/16(土) 12:25:15.03ID:RATZO/gia
しね
2023/09/16(土) 12:35:05.81ID:n1ZKqkE80
>>639
PayPayに変換できるって知らなかった
2023/09/16(土) 12:38:47.03ID:NMUMDiAt0
あそこはEUから莫大な賠償金請求されたから、必死なんだろう
643デフォルトの名無しさん (ワッチョイ 3fad-xbk3)
垢版 |
2023/09/16(土) 12:48:52.21ID:8u+hT5wA0
>>639
グロ
644デフォルトの名無しさん (ワッチョイ 4fb0-gBtz)
垢版 |
2023/09/22(金) 10:15:48.77ID:wJrbx3oK0
なあ、いつから子関数内で宣言した自動変数を戻り値に使って親関数で参照してもアクセスエラーにならなくなったんだ?
特に構造体とか
2023/09/22(金) 10:51:22.61ID:tfij4Zir0
自動変数を参照渡ししてるのか?
2023/09/22(金) 11:07:25.29ID:8SLDLfd50
アクセスエラーってのが実行時の話なら動作環境教えてくれないとなんとも
2023/09/22(金) 11:08:43.04ID:X0VLPMl/0
すんません何を言ってるのか分からん
自動変数のアドレスを返す話?
OSとかコンパイラとか色々わからないと空虚な話になりそう、ってのと(特殊な環境なのでは)

エラーになって欲しいのにならなくて
同僚がアホで困ってて
強制的にエラーにしたいって話?
2023/09/22(金) 11:13:15.28ID:z1xJQo5k0
数年に1回ほぼVC++でほぼCのコード書いてコンパイルしてるけど、
なんか最新版入れる度にデフォのエラー基準厳しくなっていく・・・。

変数定義をgoto(エラー処理)ですっ飛ばからエラーって・・・昔のCみたいに関数先頭に記述を移動する羽目に・・・
警告でいいやん。
2023/09/22(金) 11:16:56.77ID:tfij4Zir0
構造体で返すにしても、呼出元って用意した変数なり構造体で受け取るんだろう
650デフォルトの名無しさん (ワッチョイ 3fad-d4nU)
垢版 |
2023/09/22(金) 11:27:24.08ID:ZXfr4S/70
>>644
構造体の変数を戻り値に使うことは結構最初の頃から出来たと思うが、昔のマイコンは遅かったのでなるべく使わないで呼ぶ側で変数作ってそのポインタ渡してそこに値入れてもらうみたいな事してたよ。

なんで遅いのかっていうと、参照などという高度なワザは使ってなくて他のintとかの変数と同様に構造体の内容をコピーしているだけだからだ。
2023/09/22(金) 11:28:55.72ID:tfij4Zir0
共用体で渡したときは、どのメンバー使ってコピーするの?
652デフォルトの名無しさん (アウアウウー Sa53-9C00)
垢版 |
2023/09/22(金) 12:01:20.53ID:dkRHHNCea
池沼か
653デフォルトの名無しさん (ワッチョイ 4fb0-gBtz)
垢版 |
2023/09/22(金) 12:15:37.49ID:wJrbx3oK0
>>650
処理系によってはポインター渡しになってたはず
自動変数はスタック上に領域確保するので
実体渡しじゃ無いとスタック壊れてるよね?
2023/09/22(金) 12:21:54.90ID:+zFc5v5MM
初期K&Rじゃ構造体returnはなくてポータブルC以降じゃね?
2023/09/22(金) 14:01:49.98ID:jd4xXbI20
構造体を返却値にするときは、
一般的なパソコンでの呼出し規約 (Windows や System V ABI) では
呼出し側で領域を用意してそのアドレスを暗黙の引数として渡す仕組みになってる。

用意された領域の上に最初から値を直接に構築できることもあるので
そういうときはコピーコストは発生しない。
単純な関数、かつモダンなコンパイラを使ってるときは余計な工夫をする必要はないよ。
656デフォルトの名無しさん (ワッチョイ 4fb0-gBtz)
垢版 |
2023/09/22(金) 14:35:59.04ID:wJrbx3oK0
戻り値に構造体を使いたいんですぅ
2023/09/22(金) 14:53:23.56ID:HzXlnxdE0
参照てか自動変数へのポインタを戻してたってこと?

struct foo * hoge()
{
  struct foo body;
  retrun &body;
}

これ未定義だからどうとでもなってしまうんじゃなかったかな…
コンパイラが気を利かしてエラーや警告にするのも
そのまま実行コードを生成して想定外の動きをするのも
658デフォルトの名無しさん (アウアウウー Sa53-9C00)
垢版 |
2023/09/22(金) 15:05:47.80ID:dkRHHNCea
>>656
これでいいだろ
struct Hoge *fuga(struct Hoge *param0, int param1, char *param2){
何かする
return param0;
}
659デフォルトの名無しさん (ワッチョイ 4fb0-gBtz)
垢版 |
2023/09/22(金) 15:07:59.94ID:wJrbx3oK0
受ける側が用意しなあかんかぁ
2023/09/22(金) 15:08:23.02ID:HzXlnxdE0
>>657 のは、OS側のメモリに対する不正アクセスに引っかかって
エラー発報になるのは少ないんじゃないかな?
(戻りの自動変数のポインタが不正アクセスになる可能性は低い)

構造体の中にさらにポインタをつかってて、ゴミなポインタ値で実体見に行ってやっと上記が発動する

struct foo {
 struct foo* next;
  int body;
};
こんなので ret->next->body; とやったら *ret の内容がゴミ = ret->next も不定な値
ret->next->body でメモリの不正アクセス
661デフォルトの名無しさん (ワッチョイ 4fb0-gBtz)
垢版 |
2023/09/22(金) 15:09:39.40ID:wJrbx3oK0
割り込み処理があると簡単に死ぬよ
2023/09/22(金) 15:10:08.95ID:HzXlnxdE0
ハイコストなのをわかってて実体をそのまま返すことはあった
複素数を取り扱う Complex 構造体で 式の形式にしたくて ね
2023/09/22(金) 15:11:28.51ID:HzXlnxdE0
>>661
割り込み想定するなら呼び出し元で器渡しとけって話にしかならんじゃろ
2023/09/22(金) 15:14:27.76ID:wMC0ce2ad
>>653
返値用にもスタックが用意されてる
特にサイズが自由に定義できる構造体では戻り値にレジスタは使えんだろう
2023/09/22(金) 15:27:37.08ID:HzXlnxdE0
ID:wJrbx3oK0 がどういう環境で愚痴ってるのかはわからんけど
「割り込みハンドラ内でいろいろやるのをCで記述してるんだけど…」とかだったら
極力スタックは少なくしたい って話に行き着くけども

それならなおさら器は呼び出し側で用意すべし になるよなぁ
最悪関数呼び出しのオーバーヘッドも嫌って きもいマクロ関数が並ぶことも
2023/09/22(金) 15:30:18.99ID:jd4xXbI20
似たような話題が出たことがあるような気がしたので思い返してみると C++ スレの話だったわ。
コピーの省略 (copy elision) が保証される場合がどう実装されているのかという話題で
オブジェクトを構築すべき場所を呼び出し側が暗黙に渡してるから
最初からそこに構築される (のでコピーする必要がない) というのが一般的な実装で、
たぶん C の構造体受け渡しで実績があったから C++ では言語仕様として取り込めたんだな。
667デフォルトの名無しさん (アウアウウー Sacf-PB4I)
垢版 |
2023/09/23(土) 10:05:20.89ID:i9fpyxKga
thisのことですか
2023/09/23(土) 10:39:49.55ID:ALqEUzvh0
>>667
返却値のこと。
コンストラクタの場合は結果的に this でもあるとは言えるけど
2023/09/23(土) 18:43:05.31ID:lGebHJu00
c言語にthisは無い
2023/09/23(土) 19:21:52.16ID:h4supWEzd
thisはポインタなので実体を返すとか言う話とは関係ない
2023/09/23(土) 21:37:44.48ID:wNThSPil0
x86-64のABIでは、16byte未満はレジスタで渡されて、それ以上はメモリコピーが発生する、それだけ
2023/09/24(日) 01:41:30.54ID:XDqOvN5B0
PODっていうんだっけ
構造体が値わたしになるやつ
これはC++だったかな?Cはよくわからん
673デフォルトの名無しさん (アウアウウー Sacf-PB4I)
垢版 |
2023/09/24(日) 09:28:36.38ID:2YTVyUlCa
レジスタが64bit=8bytes
レジスタが128bit=16bytes
たしかにレジスタで全部返せるな
2023/09/24(日) 09:55:18.81ID:D6DOZoEp0
そのうち無限長レジスタ出てくるだろ
2023/09/24(日) 11:19:45.97ID:Cw9+et/n0
映画化決定 鬼滅の刃 - 無限長レジスタ編
2023/09/24(日) 11:48:58.25ID:wtxuVbIF0
>>672
C++ 的にはクラスが一定の条件を満たすと C の構造体と互換性があるような性質を持つ。
それが POD。
C++ の POD のことも慣例で構造体と呼んでると思うので、
C の構造体 ≒ C++ の POD みたいな感じ。
POD は値渡しがどうこうとは無関係。
2023/09/24(日) 18:47:28.19ID:zJPvjQK3d
>>674
あえてマジレスすると
RISCはレジスタ減らす傾向があるのでそれはない
近年のCPUはキャッシュがバカでかいのでレジスタを大きくする必要はあんまりない
2023/09/24(日) 19:03:57.96ID:SWucSPIu0
Plain Old Data だね。
ちゃんとした英語だと、dの繰り返しを避けて Plain Ol' Data とするらしい

最新のC++はPODっていう呼び名を廃止したんじゃ無かった?
2023/09/24(日) 19:10:57.73ID:wtxuVbIF0
>>678
概念は廃止した (性質をスタンダードレイアウトとトリビアルに分割して説明している) けど std::is_pod がまだ有るので
「POD がなくなった」と言えるかどうかはちょっと微妙なところ。
2023/09/24(日) 19:39:45.99ID:iqjAJ+9f0
>>674
無限では無いけど VLIW って聞いた事無いのかw❤
2023/09/24(日) 19:54:27.01ID:9leOLZhk0
>>680
レジスタ長を関係あるか?
2023/09/24(日) 22:05:30.32ID:/fHwRuZw0
>>680
Very Long Instruction Word(超長い命令長)で、レジスタ関係無し
2023/09/24(日) 22:12:32.99ID:D6DOZoEp0
レジスターを実メモリーサイズに拡張し、実メモリーを廃止
プログラムはレジスターに直接ロード、
データは必要に応じたサイズを割り当てる
一種のチューリングマシン
2023/09/24(日) 22:31:37.22ID:fu7DWNWn0
昔、ルネサスH8だったと思うが、関数内で大きなconst配列を定義したところ、RAM不足のビルドエラーに。
constならROM領域に割り付けるんじゃないのと思いルネに聞いたところ「言語仕様上static変数はconstの有無によらずRAMに割り付けることになってる…」とかいう回答。

Cの規格では割付領域まで規定してるのですかね。


void func(void){
static const char LARGE_TABLE[1024]={...};
...
}
685デフォルトの名無しさん (ワッチョイ 07db-oBwi)
垢版 |
2023/09/25(月) 00:05:56.55ID:flE1dY0R0
Cコンパイラじゃ無くて、リンカに領域指定するんだけどなぁ
2023/09/25(月) 00:12:22.79ID:ubRrbZbh0
処理系定義も広義には言語仕様と言えなくもないんじゃね。
まあ普通は言わんが……
687デフォルトの名無しさん (ワッチョイ 07db-oBwi)
垢版 |
2023/09/25(月) 00:13:31.19ID:flE1dY0R0
section切ってアドレス指定だろ?
2023/09/25(月) 00:23:33.45ID:Sev0Fg0J0
>>684
K&Rは定数文字列書換出来るよ。
組込に向かないって言われた理由や
2023/09/25(月) 00:26:21.67ID:Sev0Fg0J0
>>681
メモリをレジスタとして扱う技術が無いなら、無関係だろうな。

マイコンだけがコンピューターのアーキテクチャじゃ無いからね
2023/09/25(月) 00:49:29.60ID:h8TBNStf0
H8のフラッシュは書き込み回数が少ないからじゃないかな
その代わり数MBのDRAMモジュール繋いで実行できたから当時のマイコンにしては組み込みlinuxが乗ったりして富豪プログラミングができた
2023/09/25(月) 07:20:40.16ID:4OYJzvHn0
>>684
そんな規定は無い。実装の都合としてもわざわざRAMに置いてうれしいこともなさそう。

「言語仕様上自動変数はconstの有無によらずRAMに割り付ける」ならありそうな話なので
あなたの記憶違いの可能性のほうが高そう。
2023/09/25(月) 08:15:02.48ID:bQMRfZQJM
組込みマイコンでconst変数をROMに割り当てるのはスタートアップルーチンの仕事
main関数呼び出し前に実行する処理なので一旦main関数を呼び出してしまった後はROM領域に変数を割り当てる手段はない
2023/09/25(月) 09:01:11.94ID:8uqw4GxL0
皆さんありがとう。

>>691
当たりでした。よく思い返したらそうでした。

void func(void){
const char LARGE_TABLE[1024]={...};
...
}

最初にこう書いたらRAM領域割付になり、結果staticをつけて対処した、のでありました。

で、>>692 のために自動変数はRAM割付なのですね。
694デフォルトの名無しさん (ワッチョイ 07db-oBwi)
垢版 |
2023/09/25(月) 09:20:03.53ID:flE1dY0R0
なんか、トンチンカンな話ばかりで笑えるなぁ
ROMに割り付けるはRAMに割り付けるかは
リンカーにどう指示するかによるだけだろ
起動後にROMからRAMにコピーするか
そのままROMに置いとくかはデータの属性によって
リンカーがグループ化してくれたものを
起動時にスタートアップルーチンが転送するだけ
695デフォルトの名無しさん (ワッチョイ 07db-oBwi)
垢版 |
2023/09/25(月) 09:24:07.97ID:flE1dY0R0
基本的に初期値を持つ変数は元の値はROMにあるから
幾らでも呼び出せるが、普通の手段では呼び出せないだけ
強制的にアドレス指定すれば幾らでも呼べる
2023/09/25(月) 09:25:15.48ID:oaSGqRXsM
メモリ空間の変数の割り当てはスタートアップルーチンのコーディングで指定する
当然C言語ではなくマイコンメーカー指定の独自言語
大体はただパラメータを設定していくだけだけど
697デフォルトの名無しさん (ワッチョイ 07db-oBwi)
垢版 |
2023/09/25(月) 09:41:12.99ID:flE1dY0R0
つか、ROM上に変数なんか置かないから、置くのは定数
698デフォルトの名無しさん (ワッチョイ 8e86-NsvJ)
垢版 |
2023/09/25(月) 09:58:06.95ID:jZAmQlvo0
>>674
まあ、プログラムの高速化的には2048bitSIMDか4096bitSIMDレジスタがあると高速化の観点ではかなり都合が良い。AVX2は256bitだから単純計算すると性能が8倍とか16倍とかになるからね。
産業用だとarmのCPUに2048bit長のsimdレジスタがあった気がする。
699デフォルトの名無しさん (ワッチョイ 0aa1-oBwi)
垢版 |
2023/09/25(月) 10:11:14.07ID:8PlaAgAt0
値を変更しない変数は〜
https://tool-support.renesas.com/autoupdate/support/onlinehelp/ja-JP/csp/V4.01.00/CS+.chm/Compiler-CCRX.chm/Output/ccrxaac0104y.html
誰が嘘を書いたか
700デフォルトの名無しさん (ワッチョイ 0aa1-oBwi)
垢版 |
2023/09/25(月) 10:14:30.53ID:8PlaAgAt0
ああ、staticか…なら仕方ない
2023/09/25(月) 12:55:53.24ID:RmxLVxNPa
>>693 が描いたシステムは使いたくないな
2023/09/25(月) 18:22:37.93ID:4OYJzvHn0
>>693
自動変数がRAMに割り付けられるのは、再帰のたびに別アドレスとしなければならない規定があるから。
(逆に static なら同一アドレスとしなければならない。)

>692,696 (たぶん同一人物)は ROM/RAM 割り当てがスタートアップルーチンの仕事というが、
仮にそれが正しいとするとスタートアップルーチンはどこからロードするのかという、
おかしな話が出てくるので誤りと考えられる。
実際ルネサスツールでもリンカで指定するものとなっている。
https://www.renesas.com/jp/ja/document/mat/h8s-h8300-series-cc-compiler-package-ver700-users-manual
> 最適化リンケージエディタでは、入力オブジェクトプログラム内の同一セクションを結合し、
> start オプションによって指定されたアドレスに割り付けます。
2023/09/25(月) 19:02:56.98ID:ULcnNiWhM
スタートアップルーチンは内蔵フラッシュメモリ(かマスクROM)に記録されておりベクターテーブル(スタートアップの一部)にリセット割込みのエントリーアドレスを格納しておく
マイコンの電源ONでリセット割込みが発生するとスタートアップルーチン先頭からプログラムカウンタに沿って実行されメモリ変数やスタック領域、SFRの初期設定を行い最後にCのメイン関数が呼び出される
2023/09/25(月) 21:31:01.48ID:SHu1A0tUd
>>697
const って何の略でしょう
2023/09/25(月) 22:04:58.79ID:ubRrbZbh0
>>704
C の変数は const を付けても (C の用語で言うところの) 定数にはならない。
C++ では異なるし、言語仕様の定義でなく単に事前に与える値くらいのニュアンスで定数という用語を使っている解説とかもあって混乱しやすい用語ではある。
706デフォルトの名無しさん (ワッチョイ 8aad-/va4)
垢版 |
2023/09/26(火) 00:22:01.41ID:+uZUPLZA0
const の変数は値の変更が不可能なので、それを利用してコンパイラが最適化することも出来るというだけで、必ず最適化しなければならないとかROMに割り付けなければならないみたいな決まりはない筈。
707デフォルトの名無しさん (ワッチョイ 6b01-PB4I)
垢版 |
2023/09/26(火) 00:49:13.67ID:h6rxe/Hl0
RAM2KBの環境ではROMに割り付けてもらわないと非常に困る
2023/09/26(火) 01:39:36.71ID:kR568CEo0
>>707
ならそうしなさいよ、リンカスクリプトで
という話では?
2023/09/26(火) 06:43:01.34ID:9+lSh1ncM
組込みで定数を扱うならdefine定義でソースに埋め込むのが普通
constはregisterと同じ扱いなので>>706の言うとおり
710デフォルトの名無しさん (ワッチョイ 0703-oBwi)
垢版 |
2023/09/26(火) 09:03:17.82ID:HGB+okJ70
いまどきのROM化環境のC言語にゃsectionで領域グループを指定する命令は無いのけ?
2023/09/26(火) 10:31:51.31ID:HDnmN3YRM
>>699のマイコンの場合だと
スタートアップ
https://tool-support.renesas.com/autoupdate/support/onlinehelp/ja-JP/csp/V4.01.00/CS+.chm/Compiler-CCRX.chm/Output/ccrx08c0000y.html

コーディング例
https://tool-support.renesas.com/autoupdate/support/onlinehelp/ja-JP/csp/V4.01.00/CS+.chm/Compiler-CCRX.chm/Output/ccrx08c0400y.html#82903
2023/09/27(水) 00:11:11.81ID:mIITHIHe0
セクションの初期化を割り当てというから混乱するんだろう
割り当てはリンク時にもう全部終わってる
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況