C-головоломка: как вы напечатаете что-то на консоли?

/*you cannot change anything from here below*/
main()
{
exit(0);
}
/*you cannot change anything from here up*/

Об этом спросили во время интервью.

Мне сказали напечатать что-нибудь на консоли.

кто-нибудь?

10
задан Federico klez Culloca 20 August 2010 в 11:35
поделиться

8 ответов

Одним из способов, определяемых реализацией, было бы использование директив pragma для печати во время компиляции.

#pragma message "Compiling " __FILE__ "..."

Или вы можете сделать это с помощью некоторых макросов и printf (но не без введения UB в том или ином аспекте) во время выполнения.

#define exit(x) printf("Hello, world!")
int main() {
 exit(0); 
 return 0; /* if pre-C99 */
}
3
ответ дан 3 December 2019 в 13:29
поделиться
#include <stdio.h>
#define exit(c) return puts("foobar"),0

по основному

5
ответ дан 3 December 2019 в 13:29
поделиться

странный вопрос...

int main(void)
{
    printf("hello");
    return 0;
}
#define main int lol
/*you cannot change anything from here below*/
main()
{
exit(0);
}
/*you cannot change anything from here up*/
19
ответ дан 3 December 2019 в 13:29
поделиться

В большинстве ответов используется инструкция #define c-препроцессора для изменения значения программы. Большинство компиляторов также поддерживают что-то вроде

#pragma startup foo()

, детали зависят от поставщика компилятора. Вы можете запустить код ДО того, как будет вызван main (*).

0
ответ дан 3 December 2019 в 13:29
поделиться

Если вы не можете найти обходной путь для редактирования этого файла, используйте другой файл c.

0
ответ дан 3 December 2019 в 13:29
поделиться
#include <stdio.h>

#pragma message("Some foobar")

#error This is an error message

int main()

{

exit(0);

}

Я думаю, что интервьюер хотел знать, знаете ли вы о директиве #error ... только мои 2 цента.

0
ответ дан 3 December 2019 в 13:29
поделиться
#define exit(x) (printf("Bye"))
int main(int argc,char* argv)
{
    exit(0);
    getchar();
    return 0;
}
0
ответ дан 3 December 2019 в 13:29
поделиться

Действительно удивлен, что никто еще не опубликовал это:

#include <stdio.h>

#if 0

/*you cannot change anything from here below*/
main()
{
exit(0);
}
/*you cannot change anything from here up*/

#endif

int main()
{
   printf("Hello, World!");
   return 0;
}

Печатает во время выполнения и никакого неопределенного поведения.

20
ответ дан 3 December 2019 в 13:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: