Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

文字列リテラルを格納する型の誤りを訂正 #1004

Conversation

berryzplus
Copy link
Contributor

PR の目的

C++的に好ましくない記述を訂正することにより、
サクラエディタのコードの品質をわずかに向上させます。

何が好ましくないのかは後述します...orz

カテゴリ

  • リファクタリング

PR の背景

この PR は #893 SDLチェックを有効にする の抜き出しです。

SDLチェックは、visual studio が本来持っている bad code 検出機構です。
#872(開発環境をvs2017に対応させる)の一環として、SDLチェックを有効にしようとしています。

SDLチェックを有効にすると bad code 臭いコードがビルドエラーになります。
考えなしに有効にしてみんなで路頭に迷うのも寒いので、事前に bad code を除去する試みをしたいと考えています。

修正される bad code の内容

C++の強化された型付け規則では、
変更可能な文字列ポインタに文字列リテラルへのポインタを代入できません。

char* buf1 = "read only"; //← 1, NG
const char* buf2 = "read only"; //← 2, OK
char buf3[] = "read only"; //← 3, OK
  1. 文字列リテラルの実態は変更不可のコードブロックに置かれます。変更不可領域を指す、変更可能ポインタを宣言できてはおかしいので、最近のC++コンパイラではこの書き方がエラーになります。
  2. 変更不可の文字列を参照する、変更不可のポインタを宣言する書き方なので正しいです。
  3. 文字列リテラルを基にしてスタック上に変更可能な文字配列を作成する書き方なので正しいです。

PRでは 1 を 2 に修正して、問題のないコードにします。

ぶっちゃけるとぼくがレビューで見落としたコーディングバグの修正なんですよね・・・(マテ

PR のメリット

サクラエディタのコード品質をわずかに向上させることができます。

PR のデメリット (トレードオフとかあれば)

ありません。

PR の影響範囲

  • アプリ(=サクラエディタ)の機能に影響がある変更です。
    • ただし、実害はないと考えられます。
  • 機能 コマンドプロンプトで開く
    • 実質的な機能影響はないと考えられます。
  • 機能 PowerShellで開く
    • 実質的な機能影響はないと考えられます。

関連チケット

#618 管理者としてコマンドプロンプトを開くメニュー項目を追加
#872 開発環境をvs2017に対応させる
#893 SDLチェックを有効にする の抜き出しです。

LPWSTRをLPCWSTRに訂正
文字列リテラルはconst wchar_t[n]型なので、
LPWSTR型変数に代入することはできない。
@AppVeyorBot
Copy link

@beru beru added the refactoring リファクタリング 【ChangeLog除外】 label Aug 23, 2019
Copy link
Contributor

@beru beru left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

動作確認はしていませんが、変更内容を見る限りでは問題が無いと判断します。

@berryzplus
Copy link
Contributor Author

レビューありがとうございます。
さっそくマージしてしまいます。
何かあったら別PRで対応させていただきます。

@berryzplus berryzplus merged commit eb98880 into sakura-editor:master Aug 23, 2019
@berryzplus berryzplus deleted the feature/fix_bad_cast_for_string_literal branch August 23, 2019 16:33
@m-tmatma m-tmatma added this to the v2.4.0 milestone Dec 29, 2019
HoppingTappy pushed a commit to HoppingTappy/sakura that referenced this pull request Jun 16, 2020
…_cast_for_string_literal

文字列リテラルを格納する型の誤りを訂正
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
refactoring リファクタリング 【ChangeLog除外】
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants