Я нашел способ заставить замолчать все printf
с одновременно, читая C-FAQs .
Не могли бы вы сказать мне, как это работает. Программа:
#include<stdio.h>
//How to silence all printfs at once!!!
#define printf (void)
#define ab a b c d e f
#define xstr(a) str(a)
#define str(a) #a
#define string "The politicians do not even know the" xstr(ab) "of politics"
main(){
char *all=str(a b c d e f);
printf("%s\n",all);
printf(string);
}
Вывод программы пуст. Я имею в виду, что это вообще ничего не печатает. Если я #define printf
как:
/ #define printf
Это тоже ведет себя так же. Я не понимаю, как GCC компилирует вызовы в двух случаях. Никаких ошибок и предупреждений абсолютно нет.
- 1-й случай
printf
становится: (void)("%s\n",all);
- 2-й регистр
printf
становится: ("%s\n",all);