/*you cannot change anything from here below*/
main()
{
exit(0);
}
/*you cannot change anything from here up*/
Это было задано во время интервью.
Мне сказали что-то напечатать на консоли.
кто-нибудь?
/*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>
#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;
}
Печать во время выполнения и без undefined поведения.
странный вопрос...
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*/
#include <stdio.h>
#define exit(c) return puts("foobar"),0
по основному
#include <stdio.h>
#pragma message("Some foobar")
#error This is an error message
int main()
{
exit(0);
}
Я думаю, что интервьюер хотел узнать, знаете ли вы о директиве #error... только мои 2 цента.
Если вы не можете найти обходной путь для редактирования этого файла, используйте другой файл c.
В большинстве ответов используется команда #define c-preprocessor для изменения того, что означает программа. Большинство компиляторов также поддерживают что-то вроде
#pragma startup foo()
Детали зависят от поставщика компилятора. Вы можете выполнить код, прежде чем main (*) будет вызван таким образом.
#define exit(x) (printf("Bye"))
int main(int argc,char* argv)
{
exit(0);
getchar();
return 0;
}
Решение 1.
Это работает без каких-либо препроцессорных директив в cl и gcc, хотя я не тестировал, чтобы убедиться, что я не использую никаких расширений:
#include <stdio.h>
static void exit() {
printf("Hello world");
}
/*you cannot change anything from here below*/
main()
{
exit(0);
}
/*you cannot change anything from here up*/
Я думаю, что это действительно, но я не могу вспомнить, разрешено ли маскирование стандартной библиотечной функции или нет.
Решение 2
Как уже указывалось несколько других ответов, вы можете использовать директивы препроцессора, например:
#define
main или выйти, чтобы быть тем, что вызывает ifdef#if 0
для предотвращения компиляции существующего кода.#pragma message
или #error
для печати сообщения во время компиляции#pragma startup
, чтобы использовать другую функцию как основную или запускать код запуска до основного.Решение 3
Если ваш компилятор поддерживает любые С++-функции в дополнение к C, есть много ответов:
Решение 4
Я также искал любой способ принудительной ошибки во время выполнения (переполнение стека, из памяти, нулевое разыменование, tc), что обычно заставляло программу печатать что-то, но не могло найти никакого способа, t задействовать дополнительный код, и в этом случае дополнительный код может также быть printf.
Если вы интерпретировали вопрос как означающий, что вы не можете или не можете редактировать файл, комментируя /* */
или используя #ifdef _COMMENT_ME_OUT__ #endif
соответственно выше и ниже раздела, который вам не разрешено редактировать, а затем вводите новую главную страницу, то вы должен дать ответ об использовании другого файла .c.