次のコードは何も出力しない:異なる出力を生成マクロで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;
}
D = -1 < = 3-2
プリントアレイ[-1 + 1]配列[0]
D = 0 < = 3-2
プリントアレイ[1]
D配列[0 + 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'です。 –