2014-01-18 4 views
5

Я пытаюсь использовать символ преобразования, чтобы подсчитать количество символов, напечатанных до сих пор следующим кодом.Кодовые блоки MinGW и символ преобразования% n

#include <stdio.h> 
int main(void) { 
    int n; 
    printf("%s: %nFoo\n", "hello", &n); 
    printf("%*sBar\n", n, ""); 
} 

При правильной работе этот код печатает Hello Foo, затем на следующей строке Bar выровнен с Foo.

Это прекрасно работает при компиляции с GCC на моем Linux-поле. Однако при компиляции с использованием minGW в кодовых блоках на моем ПК Windows% n не работает, и все, что напечатано, это привет: Bar все на одной строке. Почему так, и я могу это исправить?

ответ

5

вариант использования компиляции -D__USE_MINGW_ANSI_STDIO

например

>gcc prog.c -D__USE_MINGW_ANSI_STDIO 

или

>clang prog.c -D__USE_MINGW_ANSI_STDIO 

Другое решение помещает эту команду выше первого оператора импорта так (см. Ниже). Это гарантирует, что стандарты ввода/вывода ANSI предпочтительнее, чем Microsoft. Дополнительная информация по этой ссылке here.

#define __USE_MINGW_ANSI_STDIO 1 
#include <stdio.h> 
+0

Можете ли вы связать документ? Я потратил некоторое время, пытаясь копать для более подробной информации об этом, и мне любопытно, что я пропустил при поиске. –

+1

@ShafikYaghmour http://sourceforge.net/apps/trac/mingw-w64/wiki/printf%20and%20scanf%20family – BLUEPIXY

3

Похоже, это проблема для Windows, это article говорит:

по умолчанию C-RunTime Library (msvcrt.dll) на Vista, похоже,% п отключен по умолчанию - из соображений безопасности, конечно

Похоже, что есть _set_printf_count_output, чтобы включить его.

BLUEPIXY обнаружили, что для того, чтобы получить его работу за пределами Visual Studio вы need to define__USE_MINGW_ANSI_STDIO:

#define __USE_MINGW_ANSI_STDIO 1 
+0

Это замечательно, но как я могу назвать эту команду с помощью блоков кода? У меня есть неопределенная эталонная ошибка. Я даже попробовал это в Visual Studio 2010 и получил аналогичную ошибку. –

+0

Не уверен, я могу получить код MSDN для работы в visual studio в реестре, [см. Его вживую] (http://rextester.com/LQB95928). –

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