Какова роль запятой в следующих утверждениях?

В настоящее время чтение в PETSc, когда я пришел к этому синтаксису в C / C ++:

PetscInt i, n = 10, col[3], its;
PetscScalar neg_one = -1.0, one = 1.0, value[3];

Я не понимаю значения запятых здесь. Это связано с кортежами? Или там что-то перегружено?

2

Решение

Это просто объявление нескольких переменных одного типа.

Это как

int a, b;

Первая строка объявляет четыре переменные типа PetscInt, называется i, n (который инициализируется 10), массив col[3] и наконец its, Вторая строка объявляет три переменные типа PetscScalar,

Итак, это:

PetscInt i,n = 10,col[3],its;

такой же как:

PetscInt i;
PetscInt n = 10;
PetscInt col[3];
PetscInt its;

Некоторые находят оригинальный способ короче, легче набирать текст, а также приятным, поскольку он показывает, что переменные имеют (часть) один и тот же тип. Некоторые находят это запутанным и / или подверженным ошибкам, это, конечно, субъективно, но я чувствовал, что должен упомянуть это, чтобы мотивировать, почему вы часто находите такой код.

12

Другие решения

Запятые здесь только для объявления нескольких переменных того же типа в одной строке заявления. Вы можете очень хорошо разбить их на одну отдельную строку, каждая, как

PetscInt i;
PetscInt n = 10;
PetscInt col[3];
PetscInt its;

Хотя оба действительны и правильный синтаксис, некоторые из нас предпочитают использовать широкую версию в любом случае, так как она обеспечивает лучшую читаемость (IMHO) и позволяет избежать любой возможной путаницы, когда указатель типа или спецификатор класса хранения связан с этим типом.

Например, для краткости

int * p, q;

такой же как

int *p;
int q;   //not int *q

q является не тип указателя там.

4

По вопросам рекламы [email protected]