Edytor/kompilator C

0

Witam
Potrzebuję zrobić na uczelnię program w jakże nowoczesnym języku C, nie wiem jaki kompilator się do tego nadaje, bo podejrzewam, że VS nie ma takiej funkcjonalności.
Z góry dzięki :)

0

netbeans
codeblocks

wystarczy uzyc googli...

1

vim + gcc.

0

qtcreator

0

Pod windowsem użyj kompilatorów : Cygwin, albo MinGW, edytor wedle uznania. VS też się nada, ale będziesz musiał żonglować rozszerzeniami cały czas.

1

Microsoft Visual C++ nadaje się wspaniale do programowania zarówno w C jak i w C++. Jednym w zalet jest np., że wyświetla ostrzeżenia dotyczące standardu oraz niebezpiecznych funkcji (np. strcpy();).

2

Nawiązując do Dawida F. Wychodzi na to ,że funkcja "printf" też jest niebezpieczna, ponieważ można ją użyć w niewłaściwy sposób. Np tak:

 
char tab[1024];
scanf("%s", tab);
printf(tab); //zły sposób
//printf("%s",tab); //dobry sposob

Ten kod wygląda na niepozorny, jednak jest on narażony na ataki z użyciem łańuchów formatujących(pomijam buffer overflow). Za pomocą parametru formatowania $ można zapisywać i odczytywać dane z pod dowolnych adresów pamięci. Można nadpisać adresy powrotu jakiś funkcji i przekierować wykonanie programu. Zatem sama w sobie printf nie jest niebezpieczna. Wszystko zależy od sposobu użycia i głupoty programisty. Same języki C/C++ nie zostały stworzone po to aby na każdym kroku kontrolować nasze poczynania. Jest to kwestia wydajności, lecz czasem musimy za to słono zapłacić.

3
robcio napisał(a):

Nawiązując do Dawida F. Wychodzi na to ,że funkcja "printf" też jest niebezpieczna, ponieważ można ją użyć w niewłaściwy sposób. Np tak:

 
char tab[1024];
scanf("%s", tab);
printf(tab); //zły sposób
//printf("%s",tab); //dobry sposob

Ten kod wygląda na niepozorny, jednak jest on narażony na ataki z użyciem łańuchów formatujących(pomijam buffer overflow). Za pomocą parametru formatowania $ można zapisywać i odczytywać dane z pod dowolnych adresów pamięci. Można nadpisać adresy powrotu jakiś funkcji i przekierować wykonanie programu. Zatem sama w sobie printf nie jest niebezpieczna. Wszystko zależy od sposobu użycia i głupoty programisty. Same języki C/C++ nie zostały stworzone po to aby na każdym kroku kontrolować nasze poczynania. Jest to kwestia wydajności, lecz czasem musimy za to słono zapłacić.

No jasne że jest niebezpieczna. Cała obsługa łańcuchów w C jest niebezpieczna.
scanf, printf, strdup, strcpy
Do tego każda funkcja łańcuchowa w której odbierasz dane bez podania wielkości bufora docelowego.
Co z tego że printf jest szybszy od cout, skoro łańcuchy formatujące to jak pole minowe - brak kontroli typów. Ponoć w nowszych kompilatorach coś tam kompilator próbuje sprawdzać ale na ile to jest skuteczne?

Łańcuchy w C to praktycznie najsłabsza część tego języka (poza deklarowaniem wskaźników na funkcje).

0

Ponoć w nowszych kompilatorach coś tam kompilator próbuje sprawdzać ale na ile to jest skuteczne?
Dlaczego ma być nieskuteczne?

#include <stdio.h>
int main()
{
    float f = 3.14f;
    printf("%d\n", f);
}
a.c:7:18: warning: format specifies type 'int' but the argument has type 'float' [-Wformat]
  printf("%d\n", f);
          ~~     ^
          %f
1 warning generated.
0

Only a moron would use printf() in an unsafe way.
Just tell them to stay away from the C programming language because it isn't for them. Tell them to use Python or something.

1 użytkowników online, w tym zalogowanych: 0, gości: 1