Taka sytuacja:
Macie plik src.c, w nim funkcja foo1() i foo2(), gdzie foo1 wywołuje wewnętrznie foo2. Chcę napisać UT dla tych funkcji, potrzebuję więc mieć możliwość wywołania każdej z nich w wersji produkcyjnej oraz mocka dla foo2 (żeby sterować flow w foo1). Przypominam, że funkcje są w tej samej jednostce translacyjnej.
Czy w C jest w ogóle możliwe jest osiągnięcie takiej separacji funkcji/mocków żeby swobodnie przetestować kod? Kombinowałem już z _attribute
  • 12
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@mirkogreg: No jak piszesz funkcje czyste, to nie musisz się przejmować. Jak coś mockujesz to co najwyżej wszelkie efekty uboczne, a nie każdą jedną funkcję, bo to się mija z sensem.
  • Odpowiedz
@mirkogreg: w C++ też tego nie zrobić jak funkcje są w tej samej jednostce translacji. Opcji jest kilka, ale zawsze sprowadza się do ifdef'a

1. Tak jak pisałeś wywalasz do oddzielnych plików. Wtedy piszesz test i dodajesz odpowiedni plik do testu. Jak kod ma działać szybko to czasami odpada, bo kompilator może gorzej zoptymalizować.
2. Robisz ifdef na każdą funkcję i includujesz pliki C w teście definiując wcześniej którą zostawić
  • Odpowiedz
@mirkogreg: bo musisz zwrócić wskaźnik na obszar pamięci, który sam sobie alokujesz, więc musisz mieć możliwość ustawienia wartości tego wskaźnika. poza tym robienie leetcode w C to masochizm.
  • Odpowiedz
@mirkogreg: no w takiej sytuacji to wiadomo. ale jeśli sortowanie jest tylko cześcią algorytmu, to można (a nawet lepiej) użyć gotowca. zresztą, na leetcode chyba nie ma zadań typu posortuj liczby, a przynajmniej nie na poziomach wyższych niż easy.
  • Odpowiedz
Za każdym razem jak widzę w nowym projekcie:

#define SAFE_FREE(var) \
if (var) {\
free(var); \
var = NULL; \
  • 21
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@Pan_krecik no tak makro, debil ze mnie. Czyli w skrócie chodzi o radzenie sobie że skutkami nieumiejętnego programowania i zamiast znaleźć przyczynę to jest leczenie skutków.
  • Odpowiedz
@Pan_krecik: @Jailer mi chodzi o to że ten if jest bez sensu bo:
1) jeśli ptr jest NULL to nie ma po co go dawać, bo free robi takiego checka
2) jeśli ptr nie jest NULL, ale wskazuje na zwolnioną już pamięć, to i tak się to wywali na free bo ten if tego nie wykryje

więc wystarczy samo free + nadpisanie ptr=NULL i tyle
  • Odpowiedz
Alibre Design - generator rolki napinacza z łożyskiem kulkowym - Alibre Script | Wstęp | PL

Przedstawiam kolejny poziom modelowania 3D - tworzenie samodzielnych generatorów modeli 3D w oparciu o API programu CAD 3D na przykładzie Alibre Design Expert. Wymagania: Alibre Script w oparciu o język Python, lub inny dowolny język, np. C jak w niniejszym filmie.

Zapraszam: (420) Alibre Design - generator rolki napinacza z łożyskiem kulkowym - Alibre Script | Wstęp |
InzynierProgramista - Alibre Design - generator rolki napinacza z łożyskiem kulkowym ...

źródło: v420m

Pobierz
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@George_Liquor: Ja tam jestem cienkim javowcem i też noszę te z 3 białymi paskami tak jak ten dżentelmen na zdjęciu; ale jakbym tak się dłużej zastanowił to do Javy pewnie jakieś szare (niczym papier toaletowy w kiosku) stanowiłyby odpowiedni komplet.
  • Odpowiedz
Wszystko, co powiesz, nie może zostać wykorzystane przeciwko Tobie. Wypełnij anonimową ankietę
https://bit.ly/3TRZiYq

#programowanie #it #informatyka #programista15k #testowanieoprogramowania #devops #sysadmin #cybersecurity #webdev #uxdesign #frontend #scrum #analizadanych #gamedev #java #python #cplusplus #csharp #javascript #kotlin
Bulldogjob - Wszystko, co powiesz, nie może zostać wykorzystane przeciwko Tobie. Wype...

źródło: alez skad

Pobierz
  • 8
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@umcumcumcbejbe trzeba mieć jaja ze stali zeby sie w to bawic. Chyba ze ktos naprawde potrafi to polaczyc, ale czasem jest tak ze jeden temat sie pieprzy, a w tym przypadku dwa naraz i wez tu ogarnij to wszystko
  • Odpowiedz
Czy ta reguła jest poprawna? Programuję ESP8266 i mam wrażenie, że czasem nie zwraca true, choć warunek jest prawdziwy. Chodzi mi m.in. czy nie trzeba wprowadzić jakichś dodatkowych nawiasów i czy można pisać + 6 przy znaku && (czy nie trzeba nawiasów. Dziś miałem wrażenie, że kod się zaciął, ale nie miałem go jak zdebugować, ale to musi być raczej ta linijka.

#arduino #esp8266 #esp32 #
  • 26
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@MisiekD: Ja bym powiedział, że nawiasów nigdy za wiele, raczej lepiej więcej, niż mniej i bym to wszystko pooddzielał nawiasami.
Poza tym, to może nie jest problem z tym if-em, tylko z tym następnym, ewentualnie jeszcze może Tobie się wydaje, że warunek powinien być spełniony, a jednak nie powinien, bo jest źle napisany.

if((((tP2 >= (tB1 + 6)) && (tP2 >= 50))) || (tP1 >= 70)))
  • Odpowiedz
zmienna temperaturaBufor1 jest typu float, a ja dodaję do niej 6 (a ta 6 jest int) i czy to może jakoś nie koliduje


@MisiekD: Nie, to nie przeszkadza. Ale możesz też to zapisać jako + 6.0.

W pętlach z czasem millis() nauczyłem się dawać UL, ale czy tak ma być - nie
  • Odpowiedz
Ehhh.... Lubie C za prostotę, ale czasami nie mam pojęcia co kierowało ludźmi nie dodając pewnych oczywistości do biblioteki standardowej. Mamy p--------d funkcji do porównywania stringów, ale nie, nie dodamy streq() bo po co, lepiej, żebyś się mógł się p--------ć.

Nie zliczę już ile razy p----------m się jak w poniższym kodzie:

if (strcmp(strA, strB))
cos_jak_strA_eq_strB....

#jezykc #programowanie
  • 6
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@BeginEnd: jak najbardziej jest na temat, tylko nie rozumiesz jak wygląda reprezentacja stringów w C ;)
Gdybyś to wziął pod uwagę to nie mylił byś kodu powrotu z funkcji strcmp i używał strncmp.
  • Odpowiedz
#technologia #cpp #jezykc #visualstudio
Hej, programiści, czy da się w VisualStudio sprawdzić rozmiar alokacji na stosie przez funkcję/metodę?
W trakcie pisania kodu vs zwrócił mi uwagę (C6262), że funkcja alokuje na stosie powyżej 16 KB, więc coś musi na bieżąco to monitorować. Da się to gdzieś podejrzeć?
  • 4
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

A jednak VS ostrzega już w trakcie pisania, a przed kompilacją. Zacząłem się więc zastanawiać, czy można to jakoś sprawdzić przed wystąpieniem ostrzeżenia.


@MostlyRenegade: ale o co w sumie pytasz? Sam napisałeś, że VS pokazuje warning przed kompilacją.
  • Odpowiedz
Hej, programiści15k,
Czy jest w standardowym C/C++ coś w rodzaju strumienia do zapisu w pamięci? Chodzi mi o to, żeby do jednego ciągłego bufora można było wrzucać sobie dużo różnych danych po kolei i potem przekazywać cały ten bufor gdzieś dalej. Teoretycznie mogę sam sobie napisać taki prosty bufor, ale może jest już coś gotowego.

#programowanie #programista15k #cpp #jezykc
  • 16
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

ciągłego bufora

dużo różnych danych

@MostlyRenegade: w buforze też musisz określić przechowywany typ. imo chcesz ładować do std::vector<uint8_t>, tylko musisz sobie zaklepać serializację/deserializację tych swoich typów

jeżeli nie chcesz serializować, to std::vector<std::variant<TypA, TypB, TypC...>>
  • Odpowiedz
Mirki, jak znaleźć pracę w #embedded? W kwietniu skończyłem informatykę na UAM w Poznaniu, miałem jeden przedmiot gdzie programowaliśmy mikrokontroler STM32 i spodobało mi się. Zrobiliśmy na nim prosty minutnik obsługiwany jednym guzikiem. Obecnie uczę się C z książki Kinga "C Programming: A Modern Approach" (super książka). W Poznaniu niestety nie ma za dużo ofert dla juniorów jeśli chodzi o embedded, a wolałbym się nie przeprowadzać. Pytanie co waszym
  • 13
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

Pytanie co waszym zdaniem powinien potrafić junior na takim stanowisku?


@stepienz13posterunku:
- C/C++ w zależności od tego w co celujesz
- Git
- W miarę dobrze znać przynajmniej jedną architekturę procków, np ARM, ewentualnie cały ekosystem (na przykład STM32) wraz z konfiguracją
  • Odpowiedz