định dạng clang có 2 tùy chọn được gọi là BinPackParameters
và BinPackArguments
. Họ dường như kiểm soát cách khai báo chức năng và các cuộc gọi hàm được thụt vào.BinPackArguments định dạng clang không hoạt động như mong đợi
BinPackParameters
dường như cung cấp kết quả mong đợi cho khai báo hàm nhưng BinPackArguments
dường như không hoạt động như mong đợi cho cuộc gọi hàm.
Đây là một tập tin thử nghiệm đơn giản:
#include <stdbool.h>
void function_with_a_huge_name_that_should_just_not_be(unsigned int a, char *b, unsigned int c, unsigned int d, unsigned int e)
{
return;
}
int main()
{
function_with_a_huge_name_that_should_just_not_be(13, "bb", 1234234, 4324324, 2355345);
}
Và đây là cách nó được định dạng:
#include <stdbool.h>
void function_with_a_huge_name_that_should_just_not_be(unsigned int a,
char *b,
unsigned int c,
unsigned int d,
unsigned int e)
{
return;
}
int main()
{
function_with_a_huge_name_that_should_just_not_be(
13, "bb", 1234234, 4324324, 2355345);
}
tập tin .clang-format
của tôi là như sau:
---
AccessModifierOffset: -2
AlignAfterOpenBracket: false
AlignEscapedNewlinesLeft: false
AlignOperands: true
AlignTrailingComments: true
AllowAllParametersOfDeclarationOnNextLine: false
AllowShortBlocksOnASingleLine: false
AllowShortCaseLabelsOnASingleLine: false
AllowShortIfStatementsOnASingleLine: false
AllowShortLoopsOnASingleLine: false
AllowShortFunctionsOnASingleLine: Inline
AlwaysBreakAfterDefinitionReturnType: false
AlwaysBreakBeforeMultilineStrings: false
AlwaysBreakTemplateDeclarations: false
BinPackParameters: false
BinPackArguments: false
BreakBeforeBinaryOperators: None
BreakBeforeBraces: Linux
BreakBeforeTernaryOperators: true
BreakConstructorInitializersBeforeComma: true
ColumnLimit: 80
CommentPragmas: '^ IWYU pragma:'
ConstructorInitializerAllOnOneLineOrOnePerLine: true
ConstructorInitializerIndentWidth: 4
ContinuationIndentWidth: 4
Cpp11BracedListStyle: false
DerivePointerAlignment: false
IndentCaseLabels: false
IndentWidth: 4
IndentWrappedFunctionNames: false
IndentFunctionDeclarationAfterType: false
KeepEmptyLinesAtTheStartOfBlocks: false
Language: Cpp
MaxEmptyLinesToKeep: 2
NamespaceIndentation: None
ObjCBlockIndentWidth: 2
ObjCSpaceAfterProperty: false
ObjCSpaceBeforeProtocolList: true
PenaltyBreakBeforeFirstCallParameter: 19
PenaltyBreakComment: 300
PenaltyBreakString: 1000
PenaltyBreakFirstLessLess: 120
PenaltyExcessCharacter: 1000000
PenaltyReturnTypeOnItsOwnLine: 60
PointerAlignment: Right
SpaceAfterCStyleCast: false
SpaceBeforeAssignmentOperators: true
SpaceBeforeParens: ControlStatements
SpaceInEmptyParentheses: false
SpacesBeforeTrailingComments: 2
SpacesInAngles: false
SpacesInCStyleCastParentheses: false
SpacesInContainerLiterals: false
SpacesInParentheses: false
SpacesInSquareBrackets: false
Standard: Auto
TabWidth: 4
UseTab: Never
clang- My phiên bản định dạng là: 3.6.0 (tags/RELEASE_360/final)
Với cả hai BinPackParameters
và BinPackArguments
là sai, tôi đã dự kiến sẽ nhận được cùng một thụt đầu dòng cho lệnh gọi hàm như tôi đang nhận cho khai báo hàm.
Bất kỳ ý tưởng nào tôi đang làm sai?
Cảm ơn nhưng với 'ColumnLimit' 0 không có thay đổi về kiểu dáng vì không có dòng nào có thể được coi là quá lớn để cần phá vỡ. – Lefteris
Điều này thực sự làm việc cho tôi. "Giới hạn cột 0 có nghĩa là không có giới hạn cột. Trong trường hợp này, định dạng clang sẽ tôn trọng quyết định vi phạm của đầu vào trong báo cáo trừ khi chúng mâu thuẫn với các quy tắc khác." http://clang.llvm.org/docs/ClangFormatStyleOptions.html – cs01
Có khắc phục không? Tôi cũng đặt một lỗi về LLVM liên quan đến vấn đề này, bởi vì tôi không thể sử dụng định dạng clang với lỗi khủng khiếp này: https://bugs.llvm.org/show_bug.cgi?id=35968 – Taw