/*you cannot change anything from here below*/
main()
{
exit(0);
}
/*you cannot change anything from here up*/
Об этом спросили во время интервью.
Мне сказали напечатать что-нибудь на консоли.
кто-нибудь?
Одним из способов, определяемых реализацией, было бы использование директив pragma
для печати во время компиляции.
#pragma message "Compiling " __FILE__ "..."
Или вы можете сделать это с помощью некоторых макросов и printf (но не без введения UB в том или ином аспекте) во время выполнения.
#define exit(x) printf("Hello, world!")
int main() {
exit(0);
return 0; /* if pre-C99 */
}
#include <stdio.h>
#define exit(c) return puts("foobar"),0
по основному
странный вопрос...
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*/
В большинстве ответов используется инструкция #define c-препроцессора для изменения значения программы. Большинство компиляторов также поддерживают что-то вроде
#pragma startup foo()
, детали зависят от поставщика компилятора. Вы можете запустить код ДО того, как будет вызван main (*).
Если вы не можете найти обходной путь для редактирования этого файла, используйте другой файл c.
#include <stdio.h>
#pragma message("Some foobar")
#error This is an error message
int main()
{
exit(0);
}
Я думаю, что интервьюер хотел знать, знаете ли вы о директиве #error ... только мои 2 цента.
#define exit(x) (printf("Bye"))
int main(int argc,char* argv)
{
exit(0);
getchar();
return 0;
}
Действительно удивлен, что никто еще не опубликовал это:
#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;
}
Печатает во время выполнения и никакого неопределенного поведения.