Archiwa tagu: cpp

Kolorowy tekst w konsoli Linux – C/C++

Czasem, dla zwiększenia czytelności programu, chcielibyśmy pokolorować tekst wyświetlany w konsoli – np. aby błędy krytyczne wypisywać na czerwono, lub po prostu dla uatrakcyjnienia wyglądu programu czy skryptu.


Wcale nie trzeba używać do tego bibliotek graficznych. Z pomocą przychodzą opcje już wbudowane w linuxową konsolę – wystarczy na początku wyświetlanego tekstu wpisać odpowiedni kod koloru – np. jak w poniższym przykładzie programu napisanego w języku C/C++:


#include <stdio.h>
void Reset()
{
  printf("%c[%dm ",0x1B,0);//przywrocenie naturalnych kolorow konsoli
}
#define BG_BLACK 40
#define BRIGHT 1
#define RED 31
#define GREEN 32
#define YELLOW 33
#define BLUE 34
#define PINK 35
#define CYAN 36
#define WHITE 37

int main()
{
  printf("%c[%dm Czerwony\n",0x1B,RED);
  printf("Bez kodu, ale nadal w barwie czerwieni\n");
  printf("%c[%dm Zielony\n",0x1B,GREEN);
  printf("Nadal obowiązuje kolor zielony.\n");
  Reset();
  printf("Po resecie: domyślny kolor wraca. \n");
  getchar();
  return 0;
}

Przekazywanie struktur do funkcji w C

Przekazywanie struktur jako argumentów funkcji w języku C jest zupełnie normalne. Czyli bez wskaźników, gwiazdek i tym podobnych znaczników;) Zupełnie jak w językach wysokiego poziomu jak Java czy C#.

Można to zrobić na przykład tak, w poniższym kodzie:


typedef struct
{
  char chars[100];
  int counter;
} TXT;

void PrettyFunction(TXT structure)
{
  int i=0;
  for( i = 0; i < structure.counter; i++ )
  {
    printf("%c", structure.chars[i]);
  }
}

Tworzenie dynamicznych tablic dwuwymiarowych w C

Ostatnio było o przesyłaniu tablic do funkcji, a dziś o ich tworzeniu – niezbyt chronologicznie, przekornie:)

Tablice dynamiczne – czyli takie, gdzie rozmiar tablicy zależy od zmiennych – nie jest ustalany na sztywno podczas pisania aplikacji, lecz ustawiany dopiero gdy np. użytkownik poda, ile danych chce przechowywać w tablicy. Całość zaprezentuję za pomocą przykładów:

Tworzenie i usuwanie tablicy jednowymiarowej:


int *someDynamicArray;
int ile=3;
someDynamicArray = new int[ile];
delete [] someDynamicArray;

Tworzenie i usuwanie tablicy dwuwymiarowej:


int **dynamicArray2d = new int *[3];
for (int i = 0; i < 3; ++i )
{
  dynamicArray2d[i] = new int [2];
}

for (int i=0; i < 3; i++)
{
  delete [] dynamicArray2d[i];
}
delete [] dynamicArray2d;

Tablice wyższych wymiarów (stosowane np. dla zaimplementowania tablicy trójwymiarowych wektorów) tworzy się analogicznie jak tablice drugiego rzędu.

Zaletą tablic dynamicznych jest także możliwość zaalokowania większej ilości pamięci niż w przypadku tablicy statycznej!

Dodawanie plików do linkera Visual Studio/Dev-C++

Jak dodać do projektu w Visual Studio/Dev-C++ plik do linkera? W zależności od programu oraz od wersji środowiska, jest nieco inaczej.

Dla Visual Studio 2010:

Prawym kliknąć na drzewo projektu -> Properties -> Linker -> Input -> dopisać nazwę, np. psapi.lib;

Dla Dev-C++:

Menu -> Projekt -> Opcje projektu -> Parametry -> Dodaj plik -> w katalogu DevCpp/lib znajduje się psapi.a, należy go dodać.

Dla Visual Studio 2005:

Dodawanie .lib do linkera podobno robi się to tak, aczkolwiek jeszcze nie sprawdziłam:

Prawym kliknąć na drzewo projektu -> Properties -> Linker -> pole Additional Dependencies.