【问题标题】:Pointer star location指针星位置
【发布时间】:2018-10-22 13:28:55
【问题描述】:

使用 GNU 缩进,有没有办法在类型后面加上“星号”?

例如:

void* foo(int* a)

但在声明中将其保持在 var 附近

int *a, b;

【问题讨论】:

  • 不要在一个声明中混用指针和非指针。这避免了大部分问题。 * 表示指针是声明符的一部分,是类型和存储类等之后的部分。
  • 您愿意使用其他代码格式化工具吗?我对 Indent 了解不多,但clang-format 至少可以让你总是把它放在左边(不过我不认为它允许根据上下文切换)。
  • 我有一个 Emacs 宏来格式化代码调用缩进,所以我认为我可以轻松切换到另一个命令,谢谢!

标签: c pointers code-formatting gnu-indent


【解决方案1】:

C 标准没有说明在type 之后或variable name 之前立即保留*,两者都可以。

int *ptr1, ptr2;/* valid, ptr1 is pointer variable, ptr2 is normal variable */
int* ptr1, ptr2;/* valid, ptr1 is pointer variable, ptr2 is normal variable */

在函数声明或定义中类似

void* foo(int* a) { 
/*...*/
}

void* foo(int *a) { /* a is int pointer */ 
/*...*/
}

阅读此Placement of the asterisk in pointer declarations

【讨论】:

  • 所以我可以选择,完美。第一种样式有哪些选择?
  • 是的,但它没有说明如何将 GNU Indent 配置为在特定位置开始
  • '*' 与变量保持一致,避免混淆,例如char* a, b, c; 当然没有声明 3 个指针。 (1 个指针和 2 个字符)比 char *a, b, c; 更清晰。
  • @DavidC.Rankin:每个声明的一个变量更加清晰:char *a; char b; char c;(或者,至少,char *a; char b, c;,因此单独的类型是单独声明的)。
  • @JonathanLeffler - 没有争吵。 (也没有用于放置'*'gnu-indent 选项)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-03-05
  • 1970-01-01
  • 2019-07-15
  • 2013-10-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多