clang-format
はコードを再フォーマットするためのツールなので、そのようなフォーマットが機能しているコードを壊したり、少なくともその動作を変更したりする可能性はありますか?コードの動作を変更する、または変更できない契約はありますか?
clang-format
でフォーマットしたいコードがたくさんあります。つまり、多くのコード行が変更されます。 clang-format
のために変更されたすべてのコード行を確認する必要がないことは、このプロセスを大幅に簡略化することになります。
clang-format
はコードの動作を変更しないと思います。一方、これが保証できるかどうか、私は100%確信していません。
確かに、コードの動作を変更する可能性があります。そしてその理由は、Cプログラムがソースコードのいくつかのプロパティを表示できるためです。私が考えているのは__LINE__
マクロですが、他に方法がないかどうかはわかりません。
考慮してください1.c
:
#include <stdio.h>
int main(){printf("%d\n", __LINE__);}
次に:
> clang 1.c -o 1.exe & 1.exe
2
いくつかのclang-format
:
> clang-format -style=Chromium 1.c >2.c
そして2.c
は:
#include <stdio.h>
int main() {
printf("%d\n", __LINE__);
}
そしてもちろん、出力は変更されました:
> clang 2.c -o 2.exe & 2.exe
3
clang-format
は空白文字のみに影響するため、clang-format
ingの前後のファイルが空白文字まで同一であることを確認できます。 Linux/BSD/OS Xでは、diff
とtr
を使用できます。
$ diff --ignore-all-space <(tr '\n' ' ' < 2.c ) <(tr '\n' ' ' < 1.c)
1.c:
#include <stdio.h>
int main() {printf("Hello, world!\n"); return 0;}
2.c:
#include <stdio.h>
int main() {
printf("Hello, world!\n");
return 0;
}
diff
コマンドの出力は空です。つまり、ファイル1.c
と2.c
は空白まで同じです。
Karoly がコメントで述べたように、理想的な条件では、重要なスペースを確認する必要があることに注意してください。文字列リテラル。しかし、現実の世界では、このテストで十分だと思います。
はい
作業フローを中断しません
システムには設定スイッチがあります:"C_Cpp.clang_format_sortIncludes":falseですが、機能しません。何が問題なのかわかりません...
私のバージョンは:ms-vscode.cpptools-0.13.1
これは私の解決策です:
安定した作業フローのために、文法を使用してください:
// clang-format off
...ここにあなたのコードがあります
// clang-format on
プロジェクトでこれを効果的に実行したため、clang形式の再フォーマットされたASMコード:
#define ASM _asm
ASM {
...
}