2016-02-16 2 views
-3

Мы начали программирование на C в моем Uni, и, похоже, я упал на первое препятствие. Моя очень простая программа не будет печатать на терминале. Код:Printf Не печатать на терминале в Apple Clang

#include "stdio.h" 
    int main(){ 
    printf("Memory size for type %s = %lu \n", "double", sizeof(double)); 
    return 0; 
}  

Я использовал все свои Google-фу, и только обнаружил, что я, видимо, следует использовать vprint, но он не будет принимать три аргумента, только два. Кроме того, причудливо, печать в файл работает! Смотрите скриншот:

Terminal screenshot

+1

Включите предупреждения компилятора и обратите внимание на них! 'sizeof' дает' size_t', а не 'unsigned long'. Используйте правильный спецификатор типа (я оставлю это как второстепенную задачу). Как указано, вы вызываете неопределенное поведение - никаких дальнейших исследований не требуется. – Olaf

+0

Спасибо тем, кто ответил. Однако использование% zu не имеет значения. –

+0

Я этого не говорил. Размышляйте о значении слова «undefined». – Olaf

ответ

1

спецификатор формата для size_t (тип возвращаемого sizeof) является %zu.

printf("Memory size for type %s = %zu \n", "double", sizeof(double)); 
+0

Тогда почему это работает при печати в файл? –

+0

Это неопределенное поведение. Никто не знает. – stackptr

0

Хорошо, по-видимому, когда я просто запустить программу, Clang печатает вывод в a.out в том же каталоге, что и код, и нет ничего, что я могу с этим поделать. Независимо от того, насколько работает код, я могу включить его, и я буду проверять свою работу с помощью ./a.out.

0

Согласно скриншоту, кажется, что существует ошибочное мнение здесь:

gcc 1.c 

НКУ используется для компиляции программы (создание исполняемого файла, то здесь, используя исходный файл 1.c), а не бегать Это. Возможно, программа была скомпилирована под именем «a.out».

При компиляции программы с помощью:

gcc 1.c -o 1.txt 

Вы на самом деле компиляции программы с НКУ и, используя опцию -o, создавая исполняемый файл под именем 1.txt (программа может быть назван любой вы хотите, или почти)

Затем, когда вы набираете

./1.txt 

вы на самом деле работает программа (1.txt) и у вас есть ожидаемый выход.

Смежные вопросы