パスワードを忘れた? アカウント作成

こちらは、commeciさんのユーザページですよ。 アナウンス:スラドとOSDNは受け入れ先を募集中です。

13334452 comment

commeciのコメント: Re:ログ出力でなく停止がデフォルトであるべき (スコア 1) 112

by commeci (#3242248) ネタ元: systemdで複数の不具合が確認される

ユニットファイルにエラーがあるなら、そのユニットは起動しない、ということでしょう。

マルチユーザモードで動作するために必須のユニットであれば、重大なエラーなのだから、シングルユーザモードに落ちればよい。

13327280 comment

commeciのコメント: 静的変数の初期値はリテラルのみ (スコア 1) 7

C言語の場合、静的変数の初期値はコンパイル時に確定する必要があるので、リテラルでないものは初期値には指定できません。
auto変数の場合は、初期値は実行時に設定されるので、変数でも関数でも指定できます。

マクロで初期値とする複合リテラルを宣言するのがいちばん素直な方法だと思います。
マクロであればネストしてもかまいませんし。
マクロ宣言で行末にバックスラッシュを書くことなどたいした問題ではないし、コード本文で初期値を正しく書けるのであれば、マクロ宣言でも正しく書けるはずです。
マクロの展開結果が不安なら、cc -E で確認できます。

どうしてもマクロで書くのが嫌なら、gcc の場合、__attribute__((constructor)) をつけて関数宣言すれば、main の実行の前にこの関数が実行されます。
グローバル変数であれば、ここで初期化することはできます。
(関数内 static はスコープ上無理。)

あるいは、処理系がC++11に対応していれば、constexpr 指定でコンパイラが計算してくれるため、初期値として constexpr 宣言した変数も指定できます。
ただし、これは C++ としての機能であるため、ファイルの拡張子を .cpp などにして、中身は mangle させないように extern "C" { }; で前後をくくっておくようにしておく必要があります。

typodupeerror

皆さんもソースを読むときに、行と行の間を読むような気持ちで見てほしい -- あるハッカー

読み込み中...