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

В настоящее время чтение в 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;

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

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

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

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

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

int * p, q;

такой же как

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

q там не указатель типа.

Другие вопросы по тегам