В настоящее время чтение в PETSc, когда я пришел к этому синтаксису в C / C ++:
PetscInt i, n = 10, col[3], its;
PetscScalar neg_one = -1.0, one = 1.0, value[3];
Я не понимаю значения запятых здесь. Это связано с кортежами? Или там что-то перегружено?
Это просто объявление нескольких переменных одного типа.
Это как
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
является не тип указателя там.