{"id":384140,"date":"2023-10-07T09:45:17","date_gmt":"2023-10-07T08:45:17","guid":{"rendered":"https:\/\/blog.jetbrains.com\/?post_type=clion&#038;p=384140"},"modified":"2023-10-07T09:45:23","modified_gmt":"2023-10-07T08:45:23","slug":"how-to-address-7-major-cpp-pain-points-with-clion","status":"publish","type":"clion","link":"https:\/\/blog.jetbrains.com\/zh-hans\/clion\/2023\/10\/how-to-address-7-major-cpp-pain-points-with-clion\/","title":{"rendered":"\u5982\u4f55\u4f7f\u7528 CLion \u89e3\u51b3 7 \u5927\u4e3b\u8981 C++ \u75db\u70b9"},"content":{"rendered":"<p>\u5728 C++ Foundation \u5f00\u5c55\u7684\u201c2023 \u5e74\u5ea6 C++ \u5f00\u53d1\u8005\u8c03\u67e5\u201d\u4e2d\uff0c\u793e\u533a\u786e\u5b9a\u4e86\u4f7f\u7528 C++ \u65f6\u7684\u4e00\u4e9b\u4e3b\u8981\u75db\u70b9\uff08\u8bf7\u53c2\u9605<a href=\"https:\/\/isocpp.org\/files\/papers\/CppDevSurvey-2023-summary.pdf\" target=\"_blank\" rel=\"noopener\">\u8c03\u67e5\u6458\u8981<\/a>\u7684\u7b2c 11 \u9875\uff09\u3002<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2023\/07\/cpp_pain_points.png\" alt=\"\u75db\u70b9\" width=\"847\" \/><\/p>\n<p>\u5982\u672c\u6587\u6240\u8ff0\uff0cCLion \u53ef\u4ee5\u901a\u8fc7\u591a\u79cd\u65b9\u5f0f\u5e2e\u52a9 C++ \u5f00\u53d1\u8005\uff1a<\/p>\n<ul>\n<li><a href=\"https:\/\/blog.jetbrains.com\/clion\/2023\/07\/how-to-address-7-major-cpp-pain-points-with-clion\/#managing_third_party_libraries\">\u7ba1\u7406\u7b2c\u4e09\u65b9\u5e93<\/a><\/li>\n<li><a href=\"https:\/\/blog.jetbrains.com\/clion\/2023\/07\/how-to-address-7-major-cpp-pain-points-with-clion\/#improving_build_times\">\u7f29\u77ed\u6784\u5efa\u65f6\u95f4<\/a><\/li>\n<li><a href=\"https:\/\/blog.jetbrains.com\/clion\/2023\/07\/how-to-address-7-major-cpp-pain-points-with-clion\/#setting_up_a_ci_pipeline\">\u642d\u5efa CI \u7ba1\u9053<\/a><\/li>\n<li><a href=\"https:\/\/blog.jetbrains.com\/clion\/2023\/07\/how-to-address-7-major-cpp-pain-points-with-clion\/#managing_a_cmake_project\">\u7ba1\u7406 CMake \u9879\u76ee<\/a><\/li>\n<li><a href=\"https:\/\/blog.jetbrains.com\/clion\/2023\/07\/how-to-address-7-major-cpp-pain-points-with-clion\/#thread_memory_and_type_safety\">\u5b9e\u65f6\u68c0\u67e5\u4ee3\u7801\u4e2d\u7684\u7ebf\u7a0b\u3001\u5185\u5b58\u548c\u7c7b\u578b\u5b89\u5168\u95ee\u9898<\/a><\/li>\n<li><a href=\"https:\/\/blog.jetbrains.com\/clion\/2023\/07\/how-to-address-7-major-cpp-pain-points-with-clion\/#development_environment\">\u4ece\u5934\u5f00\u59cb\u642d\u5efa\u5f00\u53d1\u73af\u5883<\/a><\/li>\n<li><a href=\"https:\/\/blog.jetbrains.com\/clion\/2023\/07\/how-to-address-7-major-cpp-pain-points-with-clion\/#modernize_your_code\">\u5c06\u4ee3\u7801\u73b0\u4ee3\u5316<\/a><\/li>\n<\/ul>\n<p align=\"center\"><a class=\"jb-download-button\" href=\"https:\/\/www.jetbrains.com.cn\/clion\/download\" target=\"_blank\" rel=\"noopener\">\u4e0b\u8f7d CLion<\/a><\/p>\n<h2 id=\"managing_third_party_libraries\">\u7ba1\u7406\u7b2c\u4e09\u65b9\u5e93<\/h2>\n<p>\u4f7f\u7528 C++ \u65f6\u6700\u5927\u7684\u6311\u6218\u662f<strong>\u7ba1\u7406 C++ \u5e94\u7528\u7a0b\u5e8f\u4f9d\u8d56\u7684\u7b2c\u4e09\u65b9\u5e93<\/strong>\uff1a47% \u7684\u7528\u6237\u8ba4\u4e3a\u8fd9\u662f\u4e00\u4e2a\u4e3b\u8981\u75db\u70b9\u3002 \u4e0e\u8bb8\u591a\u5176\u4ed6\u7f16\u7a0b\u8bed\u8a00\u4e0d\u540c\uff0cC++ \u6ca1\u6709\u6807\u51c6\u7684\u8f6f\u4ef6\u5305\u7ba1\u7406\u5668\uff0c\u5e76\u4e14\u4f7f\u7528\u4e86\u5404\u79cd\u89e3\u51b3\u65b9\u6848\u3002 CLion \u5177\u6709<a href=\"https:\/\/www.jetbrains.com.cn\/help\/clion\/package-management.html\" target=\"_blank\" rel=\"noopener\">\u5bf9 vcpkg \u7684\u5185\u7f6e\u652f\u6301<\/a>\uff0c\u8fd9\u662f\u6700\u6d41\u884c\u7684 C++ \u8f6f\u4ef6\u5305\u7ba1\u7406\u5668\u4e4b\u4e00\u3002 \u60a8\u8fd8\u53ef\u4ee5\u5c06\u53e6\u4e00\u6b3e\u6d41\u884c\u7684 C++ \u8f6f\u4ef6\u5305\u7ba1\u7406\u5668 Conan \u4e0e CLion \u7ed3\u5408\u4f7f\u7528\u3002 \u9002\u7528\u4e8e CLion \u7684 Conan \u63d2\u4ef6\u76ee\u524d\u4e0e\u6700\u65b0\u7248\u672c\u7684 CLion \u4e0d\u517c\u5bb9\u3002 \u4fee\u6b63\u6b63\u5728\u8fdb\u884c\u4e2d\uff0c\u4f46\u5728\u6b64\u671f\u95f4\uff0c\u60a8\u4ecd\u7136\u53ef\u4ee5\u5c06 Conan \u4e0e CLion \u4e00\u8d77\u4f7f\u7528\uff0c\u56e0\u4e3a Conan \u4f1a\u8f93\u51fa\u4e0e CLion \u517c\u5bb9\u7684 CMake \u6587\u4ef6\u3002<\/p>\n<p>\u5bf9\u4e8e CMake \u5df2\u77e5\u7684\u7b2c\u4e09\u65b9\u8f6f\u4ef6\u5305\uff0cCLion \u73b0\u5728\u63d0\u4f9b <a href=\"https:\/\/www.jetbrains.com.cn\/help\/clion\/cmakelists-txt-file.html#code-insight-cmake\" target=\"_blank\" rel=\"noopener\"><code>find_package<\/code> \u7684\u4ee3\u7801\u8865\u5168<\/a>\u3002<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2023\/07\/boost.png\" alt=\"\u589e\u5f3a CMake \u4e2d\u7684\u8865\u5168\" width=\"744\" \/><\/p>\n<h2 id=\"improving_build_times\">\u7f29\u77ed\u6784\u5efa\u65f6\u95f4<\/h2>\n<p>\u6839\u636e\u7528\u6237\u53cd\u9988\uff0c\u7b2c\u4e8c\u5927\u6311\u6218\u662f<strong>\u6784\u5efa\u65f6\u95f4<\/strong>\uff0c43% \u7684\u53d7\u8bbf\u8005\u8ba4\u4e3a\u8fd9\u662f\u4e00\u4e2a\u4e3b\u8981\u75db\u70b9\u3002 \u867d\u7136 CLion \u4e0d\u5305\u542b\u7f16\u8bd1\u5668\uff0c\u800c\u53ea\u662f\u8c03\u7528\u5de5\u5177\u94fe\u4e2d\u914d\u7f6e\u7684\u7f16\u8bd1\u5668\uff08\u4f8b\u5982 GCC \u6216 Clang\uff09\uff0c\u4e0d\u80fd\u76f4\u63a5\u5f71\u54cd\u6784\u5efa\u65f6\u95f4\uff0c\u4f46\u4f7f\u7528 CLion \u7684 <a href=\"https:\/\/www.jetbrains.com.cn\/help\/clion\/cmake-profiling.html\" target=\"_blank\" rel=\"noopener\">CMake \u5206\u6790<\/a>\u529f\u80fd\u4e5f\u53ef\u4ee5\u4f18\u5316 CMake \u6267\u884c\u6b65\u9aa4\u3002 CMake \u5206\u6790\u80fd\u591f\u8bc6\u522b CMake \u914d\u7f6e\u671f\u95f4\u6700\u8017\u65f6\u7684\u64cd\u4f5c\uff0c\u5e76\u5728\u5fc5\u8981\u65f6\u4f18\u5316 CMake \u811a\u672c\uff0c\u6709\u52a9\u4e8e\u51cf\u5c11\u9879\u76ee\u7684\u603b\u4f53\u6784\u5efa\u65f6\u95f4\u3002<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2023\/07\/cl_cmake_profiling_tooltip.png\" alt=\"CMake \u5206\u6790\" width=\"974\" \/><\/p>\n<h2 id=\"setting_up_a_ci_pipeline\">\u642d\u5efa CI \u7ba1\u9053<\/h2>\n<p>\u6839\u636e\u8c03\u67e5\uff0c\u7b2c\u4e09\u5927\u4e3b\u8981\u75db\u70b9\u662f<strong>\u4ece\u5934\u5f00\u59cb\u642d\u5efa\u6301\u7eed\u96c6\u6210\u7ba1\u9053\uff08\u81ea\u52a8\u5316\u6784\u5efa\u3001\u6d4b\u8bd5\u7b49\uff09<\/strong>\u3002 CLion \u4e3a\u6b64\u63d0\u4f9b\u4e86\u5f88\u591a\u5de5\u5177\uff0c \u5185\u7f6e\u4e86\u5bf9<a href=\"https:\/\/www.jetbrains.com.cn\/help\/clion\/unit-testing-tutorial.html#adding-framework\" target=\"_blank\" rel=\"noopener\">\u6240\u6709\u4e3b\u6d41 C++ \u6d4b\u8bd5\u6846\u67b6<\/a>\uff08Google Test\u3001Boost.Test\u3001Catch2\u3001Doctest\u3001CTest\uff09\u7684\u652f\u6301\u3002 \u5305\u62ec\u6d4b\u8bd5\u7684\u4e13\u5c5e\u8fd0\u884c\u548c\u8c03\u8bd5\u914d\u7f6e\u3001\u7528\u4e8e\u8fd0\u884c\u6216\u8c03\u8bd5\u6d4b\u8bd5\/\u5957\u4ef6\/\u56fa\u5b9a\u4f8b\u7a0b\u548c\u68c0\u67e5\u5176\u72b6\u6001\u7684\u88c5\u8ba2\u533a\u57df\u56fe\u6807\u3001\u4e13\u5c5e\u6d4b\u8bd5\u8fd0\u884c\u7a0b\u5e8f\uff0c\u4ee5\u53ca\u6d4b\u8bd5\u548c\u56fa\u5b9a\u4f8b\u7a0b\u7c7b\u7684\u4ee3\u7801\u8865\u5168\u3002<\/p>\n<p>\u6b64\u5916\uff0c\u8fd8\u6709<a href=\"https:\/\/plugins.jetbrains.com\/plugin\/1820-teamcity\" target=\"_blank\" rel=\"noopener\">\u9002\u7528\u4e8e TeamCity \u7684 CLion \u63d2\u4ef6<\/a>\u3001JetBrains \u81ea\u5df1\u7684\u81ea\u52a8\u5316\u6784\u5efa\u7ba1\u7406\u548c CI \u5de5\u5177\uff0c\u4ee5\u53ca\u7528\u4e8e\u5176\u4ed6\u6301\u7eed\u96c6\u6210\u89e3\u51b3\u65b9\u6848\u7684\u63d2\u4ef6\u3002<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2023\/07\/tests.png\" alt=\"\u5355\u5143\u6d4b\u8bd5\" width=\"1024\" \/><\/p>\n<h2 id=\"managing_a_cmake_project\">\u7ba1\u7406 CMake \u9879\u76ee<\/h2>\n<p>31% \u7684\u7528\u6237\u8868\u793a\uff0c\u5176\u4e3b\u8981\u75db\u70b9\u662f<strong>\u7ba1\u7406 CMake \u9879\u76ee<\/strong>\u3002 CMake \u662f\u6700\u6d41\u884c\u7684 C \u548c C++ \u8de8\u5e73\u53f0\u6784\u5efa\u7cfb\u7edf\u3002 CLion \u6346\u7ed1\u4e86 CMake\uff0c\u5e76\u5177\u6709\u5e7f\u6cdb\u7684 <a href=\"https:\/\/www.jetbrains.com.cn\/help\/clion\/quick-cmake-tutorial.html\" target=\"_blank\" rel=\"noopener\">CMake \u96c6\u6210<\/a>\uff0c\u4f7f CMake \u9879\u76ee\u7ba1\u7406\u4f53\u9a8c\u66f4\u4e3a\u6d41\u7545\u3002 CLion \u642d\u8f7d\u4e86\u4e00\u4e2a\u5f3a\u52b2\u7f16\u8f91\u5668\uff0c\u8fd9\u4e2a\u7f16\u8f91\u5668\u5177\u6709\u5b8c\u6574\u7684\u8bed\u6cd5\u9ad8\u4eae\u663e\u793a\u3001\u81ea\u52a8\u8865\u5168\u4ee5\u53ca CMake \u811a\u672c\u7684\u5feb\u901f\u6587\u6863\uff1b\u5185\u7f6e CMake \u8c03\u8bd5\u5668\uff1b\u9488\u5bf9\u6dfb\u52a0\u914d\u7f6e\u3001\u6784\u5efa\u7c7b\u578b\uff0c\u521b\u5efa CMake \u76ee\u6807\uff0c\u5728\u8fd9\u4e9b\u76ee\u6807\u4e2d\u6dfb\u52a0\u6216\u79fb\u9664\u6587\u4ef6\uff0c\u4ee5\u53ca\u91cd\u65b0\u52a0\u8f7d CMake \u9879\u76ee\u7684\u5185\u7f6e GUI \u652f\u6301\uff1bCMake \u9884\u8bbe\u548c CMake \u914d\u7f6e\u6587\u4ef6\u652f\u6301\uff1b\u4ee5\u53ca\u5176\u4ed6\u529f\u80fd\u3002<br \/><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2023\/07\/cl_cmake_debug_failed_fromhint.png\" alt=\"CMake \u8c03\u8bd5\u5668\" width=\"855\" \/><\/p>\n<p>\u4f46 CMake \u5e76\u4e0d\u662f CLion \u552f\u4e00\u652f\u6301\u7684\u9879\u76ee\u6a21\u578b\u3002 <strong>\u7ba1\u7406 Makefile<\/strong> \u4e5f\u662f\u7528\u6237\u7ecf\u5e38\u62a5\u544a\u7684\u4e00\u5927\u75db\u70b9\u3002 \u597d\u6d88\u606f\u662f\uff0cCLion \u8fd8<a href=\"https:\/\/www.jetbrains.com.cn\/help\/clion\/makefiles-support.html\" target=\"_blank\" rel=\"noopener\">\u652f\u6301 Makefile \u9879\u76ee<\/a>\u548c Makefile \u8bed\u8a00\uff0c\u8fd9\u5927\u5e45\u7b80\u5316\u4e86 Makefile \u7684\u4f7f\u7528\u3002<\/p>\n<h2 id=\"thread_memory_and_type_safety\">\u5b9e\u65f6\u68c0\u67e5\u4ee3\u7801\u4e2d\u7684\u7ebf\u7a0b\u3001\u5185\u5b58\u548c\u7c7b\u578b\u5b89\u5168\u95ee\u9898<\/h2>\n<p>\u7528\u6237\u62a5\u544a\u7684\u5176\u4ed6\u51e0\u4e2a\u4e3b\u8981\u75db\u70b9\u4e0e<strong>\u5b89\u5168<\/strong>\u6709\u5173\uff0c \u5305\u62ec<strong>\u7ebf\u7a0b\u5b89\u5168<\/strong>\uff08\u7ade\u4e89\u3001\u6b7b\u9501\u7b49\uff09\u3001<strong>\u5185\u5b58\u5b89\u5168<\/strong>\uff08\u8fb9\u754c\u5b89\u5168\u3001\u91ca\u653e\u540e\u4f7f\u7528\u3001\u5185\u5b58\u6cc4\u6f0f\u7b49\uff09\u548c<strong>\u7c7b\u578b\u5b89\u5168<\/strong>\u3002 \u4e3a\u4e86\u8bc6\u522b\u548c\u4fee\u6b63\u8fd9\u4e9b\u5e38\u89c1\u95ee\u9898\uff0cCLion \u5411\u5f00\u53d1\u8005\u63d0\u4f9b\u4e86\u591a\u79cd\u9759\u6001\u548c\u52a8\u6001\u4ee3\u7801\u5206\u6790\u9009\u9879\u3002 \u5bf9\u4e8e\u9759\u6001\u5206\u6790\uff0cCLion \u63d0\u4f9b\u4e86\u8bb8\u591a\u5b9e\u7528\u7684\u4ee3\u7801\u68c0\u67e5\u3001Clang-Tidy \u96c6\u6210\u4ee5\u53ca\u5185\u7f6e<a href=\"https:\/\/www.jetbrains.com.cn\/help\/clion\/global-dataflow-analysis.html\" target=\"_blank\" rel=\"noopener\">\u6570\u636e\u6d41\u5206\u6790<\/a>\u3002<\/p>\n<p>CLion \u7684\u6570\u636e\u6d41\u5206\u6790 (DFA) \u53ef\u4ee5\u9759\u6001\u8bc6\u522b\u8bb8\u591a\u672a\u5b9a\u4e49\u884c\u4e3a\u548c\u6f5c\u5728\u6f0f\u6d1e\u7684\u6765\u6e90\uff0c\u4f8b\u5982\u65e0\u9650\u5faa\u73af\u3001\u65e0\u9650\u9012\u5f52\u3001\u7f3a\u5c11 return \u8bed\u53e5\u3001\u60ac\u7a7a\u6307\u9488\u3001\u53ef\u80fd\u65e0\u6548\u7684\u8fed\u4ee3\u5668\u548c\u8d8a\u754c\u5185\u5b58\u8bbf\u95ee\u3002 DFA \u53ef\u4ee5\u5728\u5355\u4e2a\u51fd\u6570\u5185\u5c40\u90e8\u8fd0\u4f5c\uff0c\u4e5f\u53ef\u4ee5\u5728\u6574\u4e2a\u7ffb\u8bd1\u5355\u5143\u4e0a\u5168\u5c40\u8fd0\u4f5c\u3002 \u5728\u4ee5\u4e0b\u793a\u4f8b\u4e2d\uff0c\u5c40\u90e8 DFA \u8bc6\u522b\u51fa\u4e00\u4e2a\u53ef\u80fd\u56e0\u8c03\u7528 vector::push_back: \u800c\u5931\u6548\u7684\u8fed\u4ee3\u5668\uff1a<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2023\/07\/cl_dfa_dangling_iterator.png\" alt=\"\u60ac\u7a7a\u8fed\u4ee3\u5668\" width=\"564\" \/><\/p>\n<p>\u5728\u4ee5\u4e0b\u793a\u4f8b\u4e2d\uff0c\u5168\u5c40 DFA \u901a\u8fc7\u5df2\u5728\u53e6\u4e00\u4e2a\u51fd\u6570\u4e2d\u5220\u9664\u7684\u6307\u9488\u53d1\u51fa\u91ca\u653e\u540e\u5199\u5165\u8b66\u544a\uff1a<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2023\/07\/cl_dfa_danglingpointer.png\" alt=\"\u60ac\u7a7a\u6307\u9488\" width=\"499\" \/><\/p>\n<p>\u5bf9\u4e8e\u52a8\u6001\u5206\u6790\uff0cCLion \u4e0e <a href=\"https:\/\/www.jetbrains.com.cn\/help\/clion\/memory-profiling-with-valgrind.html\" target=\"_blank\" rel=\"noopener\">Valgrind<\/a> \u4ee5\u53ca<a href=\"https:\/\/www.jetbrains.com.cn\/help\/clion\/google-sanitizers.html\" target=\"_blank\" rel=\"noopener\">\u4f17\u591a Sanitizer<\/a> \u5b8c\u5168\u96c6\u6210\uff0c\u4f8b\u5982 AdressSanitizer\u3001LeakSanitizer\u3001ThreadSanitizer\u3001UndefinedBehaviourSanitizer \u548c MemorySanitizer\u3002 \u6211\u4eec\u6700\u8fd1\u8fd8\u589e\u52a0\u4e86\u66f4\u597d\u7684\u591a\u7ebf\u7a0b\u8c03\u8bd5\u652f\u6301\uff0c\u7528\u4e8e\u8ddf\u8e2a\u5e76\u53d1\u95ee\u9898\uff0c\u4f8b\u5982<a href=\"https:\/\/www.jetbrains.com.cn\/help\/clion\/parallel-stacks-view.html\" target=\"_blank\" rel=\"noopener\">\u5e76\u884c\u5806\u6808\u89c6\u56fe<\/a>\u4ee5\u53ca\u8c03\u8bd5\u671f\u95f4<a href=\"https:\/\/www.jetbrains.com.cn\/help\/clion\/examining-suspended-program.html#freeze-threads\" target=\"_blank\" rel=\"noopener\">\u51bb\u7ed3\u548c\u89e3\u51bb\u4e2a\u522b\u7ebf\u7a0b<\/a>\u7684\u529f\u80fd\u3002<\/p>\n<h2 id=\"development_environment\">\u5f00\u53d1\u73af\u5883<\/h2>\n<p>\u7528\u6237\u62a5\u544a\u7684\u53e6\u4e00\u4e2a\u75db\u70b9\u662f<strong>\u4ece\u5934\u5f00\u59cb\u642d\u5efa\u5f00\u53d1\u73af\u5883<\/strong>\uff08\u7f16\u8bd1\u5668\u3001\u6784\u5efa\u7cfb\u7edf\u7b49\uff09\u7684\u56f0\u96be\u3002 CLion \u4e5f\u53ef\u4ee5\u4e3a\u6b64\u63d0\u4f9b\u5e2e\u52a9\uff1a\u5982\u524d\u6587\u6240\u8ff0\uff0cCLion \u5df2\u6346\u7ed1 CMake\uff0c\u4f46\u5b83\u8fd8\u9644\u6709\u6346\u7ed1\u7684\u8c03\u8bd5\u5668\u3001Windows \u4e0a\u7684\u6346\u7ed1 MinGW\u3001\u901a\u8fc7\u4e13\u5c5e Docker \u63d2\u4ef6\u548c Docker \u5de5\u5177\u94fe\u5b9e\u73b0\u7684 Docker \u652f\u6301\uff0c\u4ee5\u53ca\u5176\u4ed6\u529f\u80fd\u3002 \u5bf9\u4e8e\u8fdc\u7a0b\u5f00\u53d1\uff0cCLion \u652f\u6301 <a href=\"https:\/\/www.jetbrains.com.cn\/help\/clion\/remote-development-a.html\" target=\"_blank\" rel=\"noopener\">JetBrains Gateway<\/a>\uff0c\u5141\u8bb8\u5728\u8fdc\u7a0b\u4e3b\u673a\u4e0a\u8fd0\u884c CLion \u5e76\u901a\u8fc7\u7626\u5ba2\u6237\u7aef\u8fde\u63a5\uff0c\u4ee5\u53ca\u642d\u5efa<a href=\"https:\/\/www.jetbrains.com.cn\/help\/clion\/remote-development.html\" target=\"_blank\" rel=\"noopener\">\u8fdc\u7a0b\u5f00\u53d1\u73af\u5883<\/a>\u7684\u5404\u79cd\u5176\u4ed6\u65b9\u5f0f\u3002<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2023\/07\/gateway.png\" alt=\"Gateway\" width=\"800\" \/><\/p>\n<h2 id=\"modernize_your_code\">\u5c06\u4ee3\u7801\u73b0\u4ee3\u5316<\/h2>\n<p>\u6700\u540e\uff0c\u5c06\u73b0\u6709\u4ee3\u7801\u8fc1\u79fb\u5230\u6700\u65b0\u7684\u8bed\u8a00\u6807\u51c6\u5bf9\u4e8e 8% \u7684\u7528\u6237\u6765\u8bf4\u662f\u4e3b\u8981\u75db\u70b9\uff0c\u5bf9\u4e8e 27% \u7684\u7528\u6237\u6765\u8bf4\u662f\u6b21\u8981\u75db\u70b9\u3002 \u4e3a\u4e86\u8f7b\u677e\u5730\u5c06\u73b0\u6709\u4ee3\u7801\u8fc1\u79fb\u5230\u66f4\u73b0\u4ee3\u7684 C++ \u6807\u51c6\uff0cCLion \u76f4\u63a5\u5728 IDE \u4e2d\u652f\u6301 <a href=\"https:\/\/www.jetbrains.com.cn\/help\/clion\/clang-tidy-checks-support.html\" target=\"_blank\" rel=\"noopener\">Clang-Tidy<\/a> \u73b0\u4ee3\u5316\u68c0\u67e5\u3002<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2023\/07\/modernize.png\" alt=\"\u5c06 C++ \u4ee3\u7801\u73b0\u4ee3\u5316\" width=\"630\" \/><\/p>\n<p align=\"center\"><a class=\"jb-download-button\" href=\"https:\/\/www.jetbrains.com.cn\/clion\/download\" target=\"_blank\" rel=\"noopener\">\u4e0b\u8f7d CLion<\/a><\/p>\n\n\n<p><\/p>\n\n\n\n<p>\u672c\u535a\u6587\u82f1\u6587\u539f\u4f5c\u8005\uff1a<\/p>\n\n\n    <div class=\"about-author \">\n        <div class=\"about-author__box\">\n            <div class=\"row\">\n                <div class=\"about-author__box-img\">\n                    <img decoding=\"async\" src=\"https:\/\/secure.gravatar.com\/avatar\/?s=200&#038;r=g\" width=\"200\" height=\"200\" alt=\"\" loading=\"lazy\"  class=\"avatar avatar-200 wp-user-avatar wp-user-avatar-200 photo avatar-default\">\n                <\/div>\n                <div class=\"about-author__box-text\">\n                                                        <\/div>\n            <\/div>\n        <\/div>\n    <\/div>\n","protected":false},"author":1297,"featured_media":372773,"comment_status":"closed","ping_status":"closed","template":"","categories":[601],"tags":[507,3439,632,489],"cross-post-tag":[],"acf":[],"_links":{"self":[{"href":"https:\/\/blog.jetbrains.com\/zh-hans\/wp-json\/wp\/v2\/clion\/384140"}],"collection":[{"href":"https:\/\/blog.jetbrains.com\/zh-hans\/wp-json\/wp\/v2\/clion"}],"about":[{"href":"https:\/\/blog.jetbrains.com\/zh-hans\/wp-json\/wp\/v2\/types\/clion"}],"author":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/zh-hans\/wp-json\/wp\/v2\/users\/1297"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/zh-hans\/wp-json\/wp\/v2\/comments?post=384140"}],"version-history":[{"count":4,"href":"https:\/\/blog.jetbrains.com\/zh-hans\/wp-json\/wp\/v2\/clion\/384140\/revisions"}],"predecessor-version":[{"id":394953,"href":"https:\/\/blog.jetbrains.com\/zh-hans\/wp-json\/wp\/v2\/clion\/384140\/revisions\/394953"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/zh-hans\/wp-json\/wp\/v2\/media\/372773"}],"wp:attachment":[{"href":"https:\/\/blog.jetbrains.com\/zh-hans\/wp-json\/wp\/v2\/media?parent=384140"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/zh-hans\/wp-json\/wp\/v2\/categories?post=384140"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/zh-hans\/wp-json\/wp\/v2\/tags?post=384140"},{"taxonomy":"cross-post-tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/zh-hans\/wp-json\/wp\/v2\/cross-post-tag?post=384140"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}