LINUX.ORG.RU

Embedded C: вопросы на собеседованиях

 , ,


4

5

Я знаю, на лоре много сишников и ембедщиков. А проводящих собеседования на работу еще больше.

Так вот, уважаемые отбиральщики мужей у жен специалистов на должность embedded C developer, что вы обычно на собесах спрашиваете?

Особенно интересны вопросы по Сишке с намеком на завалить кандидата — неочевидные или на хорошее знание стандарта.

Знаю, в гугле такого много, но хочется от живых людей примеры, а не от индусов, пиарящих себя и свой сайт.



Последнее исправление: untitl3d (всего исправлений: 3)
Ответ на: комментарий от Legioner

Но вот то подмножество С++, которое называется С, оно слишком убогое.

Вот, кстати, хороший вопрос для отсеивания таких «легионеров»:

Является ли С подмножеством C++?

anonymous
()
Ответ на: комментарий от anonymous

Вот, кстати, хороший вопрос для отсеивания таких «легионеров»:

Кстати да.

Лоровские сишники не любят когда говорят, что С является подмножеством С++

И надпись C/C++ не любят.

Но комитеты С и С++ раз в месяц проводят встречи:

C and C++ Compatibility Study Group

Сентябрь: http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2814.pdf

Август: http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2795.pdf

Июль: http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2789.pdf

и т.д.

и в комитете С не стесняются писать C/C++.

Можете поиском по странице проверить:

http://www.open-std.org/jtc1/sc22/wg14/www/wg14_document_log.htm

Как же так?

fsb4000 ★★★★★
()
Ответ на: комментарий от Legioner

Будь ласка, попробуй скомпилировать вот это:

/* main.cpp */

#include <stdio.h>

void * a;
int *b = a;

int main(void)
{
    printf("%d\n", b);
}

и запости сюда выхлоп g++

shkolnick-kun ★★★★★
()
Ответ на: комментарий от fsb4000

В приведенных тобой примерах нет опровержения или подтверждения. Там вообще ничего нет. А суть проста: С стал основой для крестов. Так что утверждение про подмножество как минимум некорректно.

Oberstserj ★★
()
Ответ на: комментарий от Legioner

Пиши сразу void *new; int *class = new; Я же говорю, буквоедство. Ещё про _Generic расскажи.

Не угадал. Нужно было просто попытаться скомпилировать файл.


-------------- Build: Debug in lol (compiler: GNU GCC Compiler)---------------

g++ -Wall -fexceptions -g  -c /home/anon/Desktop/lol/main.cpp -o obj/Debug/main.o
g++  -o bin/Debug/lol obj/Debug/main.o   
/home/anon/Desktop/lol/main.cpp:4:10: error: invalid conversion from 'void*' to 'int*' [-fpermissive]
    4 | int *b = a;
      |          ^
      |          |
      |          void*
/home/anon/Desktop/lol/main.cpp: In function 'int main()':
/home/anon/Desktop/lol/main.cpp:8:14: warning: format '%d' expects argument of type 'int', but argument 2 has type 'int*' [-Wformat=]
    8 |     printf("%d\n", b);
      |             ~^     ~
      |              |     |
      |              int   int*
      |             %n
Process terminated with status 1 (0 minute(s), 0 second(s))
1 error(s), 1 warning(s) (0 minute(s), 0 second(s))
 

shkolnick-kun ★★★★★
()
Ответ на: комментарий от Oberstserj

А суть проста: С стал основой для крестов. Так что утверждение про подмножество как минимум некорректно.

А суть проста, так тут пыжился, и обкакался одним предложением. Расписался в своем абсолютном непонимании множеств и логики.

anonymous
()
Ответ на: комментарий от anonymous

Вы тоже растианин как и я?

Владимир

anonymous
()
Ответ на: комментарий от anonymous

Ну давай ты просвети всех. Не забудь только, что для того чтобы считаться подмножеством язык должен быть по сути урезанной версией родителя. Однако, что в си, что в крестах есть вещи, которые не входят друг в дурга. Кроме того в лоб сравнивать в общем-то процедурный си и ооп кресты - ну такое себе. Так что теперь жду как обосрешься ты.

Oberstserj ★★
()
Ответ на: комментарий от Oberstserj

Ну давай ты просвети всех.

Ну вот просвещаю всех. Ты все еще обосраный. Ты даже не можешь понять текст из 2-х предложений. Как ты вообще ТЗ осиливаешь? Я не утверждал что С это подмножество С++, я утверждал (и утверждаю) что у тебя низкий IQ, вследствии чего проблемы с математикой (логика и множества).

anonymous
()
Ответ на: комментарий от fsb4000

и в комитете С не стесняются писать C/C++.

… в фразе «конференция по совместимости C/C++». А на ЛОРе линуксоиды не стесняются писать Windows/Linux. Это значит, что Linux подмножество Windows? Или наоборот?

monk ★★★★★
()
Ответ на: комментарий от shkolnick-kun

Отличия это сколько часов ручного труда на тысячу строк типового кода ты потратишь чтобы портировать с одного языка на другой. В случае C - C++ это будет условно час на тысячу строк кода (реально скорей всего ещё меньше). В случае C - Rust это будет раз в 10 больше.

Legioner ★★★★★
()
Ответ на: комментарий от anonymous

Я не утверждал что С это подмножество С++

Тяжело жопой вилять, когда тебя за нее схватили, да?

Oberstserj ★★
()
Ответ на: комментарий от Legioner

В случае C - C++ это будет условно час на тысячу строк кода

Если в результате будет идиоматичный C++ код, а не тупо перекомпиляция сишного кода C++ компилятором, то никак ни час, а на порядок как минимум больше. На раст примерно столько же времени нужно будет.

anonymous
()
Ответ на: комментарий от anonymous

Про идиоматичный С++ код никто не говорил. Идиоматичность это вообще больше из области гуманитариев, у каждого она своя. Речь о том, чтобы код компилировался и работал идентично исходному.

Legioner ★★★★★
()
Ответ на: комментарий от anonymous

На раст примерно столько же времени нужно будет.

чтобы на расте рисовать времена жизни переменных и всякие там владения… это надо понимать логику программы. а переписать на плюсы можно вообще не разбираясь, и потягивая смузи(как тут любят).

alysnix ★★★
()
Ответ на: комментарий от alysnix

а переписать на плюсы можно вообще не разбираясь, и потягивая смузи(как тут любят).

Это будет чистая ИБД, для такого достаточно extern «C».

anonymous
()
Ответ на: комментарий от alysnix

чтобы на расте рисовать времена жизни переменных и всякие там владения… это надо понимать логику программы

Так он же пишет «Речь о том, чтобы код компилировался и работал идентично исходному.».

Для этого достаточно repr(C) и unsafe повсюду расставить. Можно без включения головного мозга.

monk ★★★★★
()
Ответ на: комментарий от Legioner

Про идиоматичный С++ код никто не говорил. Идиоматичность это вообще больше из области гуманитариев, у каждого она своя.

Тогда смысла в переписывании нет.

Речь о том, чтобы код компилировался и работал идентично исходному.

Для этого достаточно extern «C» без всякого переписывания.

anonymous
()
Ответ на: комментарий от anonymous

Тогда смысла в переписывании нет.

Смысл в том, чтобы получить компилирующийся С++. Потом можно его дописывать уже используя какие-то С++-фичи. Может быть рефакторить потихоньку.

Для этого достаточно extern «C» без всякого переписывания.

При чём тут extern C? Он только включает C-шную передачу параметров.

Этот код не компилируется:

extern "C" {
    void foo(void *v) {
        int *p = v;
    }
}
Legioner ★★★★★
()
Ответ на: комментарий от Legioner

Смысл в том, чтобы получить компилирующийся С++. Потом можно его дописывать уже используя какие-то С++-фичи. Может быть рефакторить потихоньку.

Ну возможно и удобно в некоторых случаях, но по моему проще все это рядом делать не трогая сишного кода, который часто написан в плохом с точки зрении C++ стиле.

Этот код не компилируется:

Сишные исходники так и остаются в си файлах и все прекрасно компилируется.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.