следующий код печатает ничего:2 подобные программы C с макро не производить различные выходные
#include<stdio.h>
#define TOTAL_SIZE ((sizeof(array))/(sizeof(array[0])))
int main()
{
int array[]={1,2,3}, d;
for(d=-1; d<=TOTAL_SIZE-2; ++d)
{
printf("%d\n", array[d+1]);
}
return 0;
}
д = -1 < = 3-2
печатает массив [-1 + 1], который является массивом [0]
д = 0 < = 3-2
печатает массив [0 + 1], который является массивом [1]
д = 1 < = 3-2
печатает массив [1 + 1], который является массивом [2]
Но ни один элемент не напечатан!
Но этот код производит правильный вывод печать всех элементов в массиве:
#include<stdio.h>
#define TOTAL_SIZE ((sizeof(array))/(sizeof(array[0])))
int main()
{
int array[]={1,2,3}, d;
for(d=0; d<=TOTAL_SIZE-1; ++d)
{
printf("%d\n", array[d]);
}
return 0;
}
Но чистый эффект обеих петель кажутся одинаковыми.
Если мы заменим макрос TOTAL_SIZE
на количество элементов в массиве, оно будет работать. Таким образом, проблема связана с макросом.
Но когда я пытаюсь распечатать значение, генерируемое TOTAL_SIZE
, оно печатает правильное значение.
В чем проблема с первой программой?
Включите все предупреждения и обработайте их как ошибки. Это единственный способ оставаться в здравом уме. Для gcc и clang это '-Wall -Wextra -Wpedantic -Werror'. –