Как мне программировать, используя кошку?

23
задан 16 revs, 5 users 37% 8 February 2017 в 14:07
поделиться

9 ответов

$ cat > hello.c
#include <stdio.h>

main(void) {
    printf("Hello, world.\n");
}
^D
$ gcc hello.c
$ ./a.out
Hello, world.
56
ответ дан 29 November 2019 в 00:37
поделиться

Нет, echo явно лучше:

echo 'main(){puts("Hello world\n");}'  | gcc -xc -

Даже если вы хотите использовать cat (кошачьи, в конце концов, замечательные), зачем ставить исходник на диск? Просто перенаправьте вывод cat компилятору, как в случае echo .

37
ответ дан 29 November 2019 в 00:37
поделиться

Думаю, вы пропустили шутку. Дело в том, что cat не редактор; это просто способ поместить текст в файл за один раз, без редактирования или исправления. Пишешь один раз, и все.

Если вы к чему-то еще, можете ли вы пояснить?

4
ответ дан 29 November 2019 в 00:37
поделиться

Шутка в том, что вы не редактируете, вы просто используете cat и, возможно, (если вы собираетесь быть тупым). .. эхо . Например:

echo "#stdio.h\n int main(int argc, char **argv){\nprintf(\"hello World\\n\");\nreturn(0);\n}" > helloworld.c

, затем

cat helloworld.c

повторить.

(также, мне должно быть скучно идти и напечатать это)

4
ответ дан 29 November 2019 в 00:37
поделиться

Есть книга по этой теме.

4
ответ дан 29 November 2019 в 00:37
поделиться

gcc ? настоящие программисты используют cat и xxd :

$ cat | xxd -r > a.out
0000000: cefa edfe 0700 0000 0300 0000 0200 0000  ................
0000010: 0b00 0000 a803 0000 8500 0000 0100 0000  ................
0000020: 3800 0000 5f5f 5041 4745 5a45 524f 0000  8...__PAGEZERO..
0000030: 0000 0000 0000 0000 0010 0000 0000 0000  ................
<lot of other stuff>
0003090: 0a00 0000 0b00 0000 2000 6479 6c64 5f73  ........ .dyld_s
00030a0: 7475 625f 6269 6e64 696e 675f 6865 6c70  tub_binding_help
00030b0: 6572 005f 5f64 796c 645f 6675 6e63 5f6c  er.__dyld_func_l
00030c0: 6f6f 6b75 7000 6479 6c64 5f5f 6d61 6368  ookup.dyld__mach
00030d0: 5f68 6561 6465 7200 5f4e 5841 7267 6300  _header._NXArgc.
00030e0: 5f4e 5841 7267 7600 5f5f 5f70 726f 676e  _NXArgv.___progn
00030f0: 616d 6500 5f5f 6d68 5f65 7865 6375 7465  ame.__mh_execute
0003100: 5f68 6561 6465 7200 5f65 6e76 6972 6f6e  _header._environ
0003110: 005f 6d61 696e 0073 7461 7274 005f 6578  ._main.start._ex
0003120: 6974 005f 7075 7473 0000 0000            it._puts....
^D
$ chmod 755 ./a.out
$ ./a.out
Hello, world.

кстати, я не знал, что 0xFEEDFACE было магическим числом в двоичных файлах Mach-O ... круто .

6
ответ дан 29 November 2019 в 00:37
поделиться

Давайте посмотрим, как далеко мы сможем это зайти.

вывод для всего этого будет:

Hello World
$ perl -E"$(cat)"
say 'Hello World'
^D

$ test=$(cat); perl -E"$test"
say 'Hello World'
^D

$ cat | perl -M5.010
say 'Hello World'
^D

$ cat > test; test=$(cat test); perl -E"$test"
say 'Hello World'
^D

$ cat > test; test=$(cat test)$(cat); perl -E"$test"
say
^D
'Hello World'
^D

$ cat > test; test=$(cat test); perl -E"$test$(cat)"
say
^D
'Hello World'
^D

$ cat > test; test=$(cat test); perl -E"$(cat)$test"
'Hello World'
^D
2
ответ дан 29 November 2019 в 00:37
поделиться

См. Статью в Википедии о настоящих программистах. Вы можете найти учебные пособия в Интернете. Лучше всего сначала узнать сборку (знать ее очень хорошо).

«Настоящие программисты не используют IDE, они пишут программы, используя cat> a.out» (то есть они пишут машиночитаемые двоичные файлы от начала до конца без совершая какие-либо ошибки).

0
ответ дан 29 November 2019 в 00:37
поделиться

Я украл принятый и получивший наибольшее количество голосов ответ и объединил его с эхо-ответом, но я добавил автоматическое условное выполнение, если компиляция прошла успешно.

$ cat | gcc -xc - && ./a.out
#include <stdio.h>

main(void) {
    printf("Hello, world.\n");
}
^D
Hello, world.
1
ответ дан 29 November 2019 в 00:37
поделиться
Другие вопросы по тегам:

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