Как я могу решить мой код, чтобы проверить размер типа данных (это язык C с компилятором GCC) на Linux Mint

Я пишу свой код на Linux и использую компилятор gcc.

#include <stdio.h>

void main () {
        printf("Data Types                  Size(bytes)\n");
        printf("=======================================\n");
        printf("char                        %2d\n", sizeof(char));
        printf("unsigned char               %2d\n", sizeof(unsigned char));
        printf("signed char                 %2d\n", sizeof(signed char));
        printf("int                         %2d\n", sizeof(int));
        printf("unsigned int                %2d\n", sizeof(unsigned int));
        printf("unsigned long int           %2d\n", sizeof(unsigned long int));
        printf("unsigned short int          %2d\n", sizeof(unsigned short int));
        printf("signed int                  %2d\n", sizeof(signed int));
        printf("short int                   %2d\n", sizeof(short int));
        printf("signed short int            %2d\n", sizeof(signed short int));
        printf("long int                    %2d\n", sizeof(long int));
        printf("signed long int             %2d\n", sizeof(signed long int));
        printf("float                       %2d\n", sizeof(float));
        printf("double                      %2d\n", sizeof(double));
        printf("long double                 %2d\n", sizeof(long double));
}

затем скомпилировал это шоу, обнаружил сбой.

выход

1 ответ

Решение

sizeof дает результат типа size_t, Вы должны использовать %zu спецификатор формата для печати результата.

Используя несоответствующий тип аргументов, (например: %d который ожидает int с результатом sizeof который нуждается в %zu) вызывает неопределенное поведение.

После этого, void main () довольно устаревшая подпись для размещенной среды, вы должны по крайней мере использовать int main (void) быть соответствующим.

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

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