OpenRTM / OpenRTM-aist

OpenRTM-aist: RT-Middleware and OMG RTC implementation in C++ implemented by AIST
https://openrtm.org/
Other
19 stars 12 forks source link

using reserved name #217

Closed r-kurose closed 3 years ago

r-kurose commented 5 years ago

Describe the bug C++ 予約語を使っている。 優先度低です。

To Reproduce 以下をターミナルで実行する。

注1: __ が名前のどこかに使われているという部分だけを見ています。 _ から始まるワードなどは未チェック。 注2: grep で見ているので、同じ行に除外ワードが入っている場合は検出出来ていません。

Reproducibility none

Expected behavior C++ 規格に違反しないこと

Screenshots or Logs

Environment

Additional context #define RDTSC はコメント部分だが、不要なので消すべき。 uint32 などは C11 で定義されているものを使うべき。

n-ando commented 3 years ago

C++の予約後でアンダースコアが関係するものの規約

  1. アンダースコアが連続する名前(コード中どこでも禁止)
  2. アンダースコアで始まり大文字が続く名前(コード中どこでも禁止)
  3. アンダースコアから始まる名前(グローバル変数のみ禁止)

上記について、1. について以下のスクリプトでチェックし修正する。

#!/bin/bash

grep "__" -r . | \
    egrep "\.(cpp|h):" | \
    egrep -v "(doil|tests)" | \
    egrep -v "(__QNX|__RTP|__NT|__WIN32|__GNU|__gnu|__clang__|__linux|__declspec|__powerpc|__arm|__pragma|__attribute|_____)" | \
    egrep -v "(__widget__|__type__|__constraints__)" | \
    egrep -v "(__rosidl)" | \
    egrep -v "(__restrict)" | \
    egrep -v "(__this())"

また、2. については、以下のスクリプトでチェックし変更した。

#!/bin/bash

find . -type f -name '*.h' -exec grep -H " _[A-Z]" {} \; \
         -or -name '*.cpp' -exec grep -H " _[A-Z]" {} \; | \
    egrep -v '(Macho\.h|Macho\.cpp)' | 
    egrep -v '(_WIN32|_MSC_VER|_MAX_PATH)' | \
    egrep -v '(_GNU_SOURCE|_TRUNCATE)' | \
    egrep -v '(_CORBA_Unbounded_Sequence)'

ただし、Machi.h|cpp には _[大文字] のクラス名が多数あり、置き換えも検討したが、今後のMachoのアップデートも考慮し変更しないことしたので、スクリプトでは除いてある。

n-ando commented 3 years ago
  1. アンダースコアから始まる名前(グローバル変数のみ禁止)については、以下のスクリプトでチェックしたが、
#!/bin/bash

find . -type f -name '*.h' -exec grep -H " _[A-Z]" {} \; \
         -or -name '*.cpp' -exec grep -H " _[A-Z]" {} \; | \
    egrep -v '(Macho\.h|Macho\.cpp)' | 
    egrep -v '(_WIN32|_MSC_VER|_MAX_PATH)' | \
    egrep -v '(_GNU_SOURCE|_TRUNCATE)' | \
    egrep -v '(_CORBA_Unbounded_Sequence)'

色々マッチするが、グローバル変数はなさそう。 追加で、変更が簡単そうなローカル変数を変更 (argc -> argc 等)