Edytor/kompilator C

Edytor/kompilator C
G1
  • Rejestracja:prawie 15 lat
  • Ostatnio:ponad 12 lat
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...

n0name_l
  • Rejestracja:ponad 12 lat
  • Ostatnio:prawie 5 lat
  • Postów:2412
1

vim + gcc.

0

qtcreator

Inquis1t0r
  • Rejestracja:ponad 12 lat
  • Ostatnio:11 minut
  • Postów:287
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.


"I am like a mage invoking incantations into a mysterious black box, conjuring useful applications and bending it to my will."
edytowany 1x, ostatnio: Inquis1t0r
Zobacz pozostały 1 komentarz
Inquis1t0r
Zdaje się, że każdorazowo trzeba będzie robić plik z .c w projekcie, albo zmieniać .cpp na .c.
RE
i to taki wielki problem?
Inquis1t0r
Nie, ja stwierdziłem tylko, że da się to zrobić.
n0name_l
Troche linii kodu i problem z rozszerzeniami znika ;>
Azarien
Najechanie na plik w Solution Explorerze, F2, End, Backspace, Backspace, Enter jest IMHO łatwiejsze niż jakieś „linie kodu”.
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();).

Zobacz pozostałe 7 komentarzy
byku_guzio
A słyszałeś o czymś takim jak wygoda? Skoro nie podobają Ci się gotowe rozwiązania i uproszczenie to może darujesz sobie korzystanie z stl'a, strumieni itd. Proponuję pisać wszystko wstawkami asm.
n0name_l
Ja nic nie mowilem o wygodzie tylko o tym, ze nazywanie funkcji "niebezpieczna" tylko dlatego, ze mozna ja zle uzyc jest smieszne.
byku_guzio
No to pisz podanie do MS ;)
Azarien
1) warningi o strcpy można wyłączyć. 2) funkcja strcpy jest „deprecated”, bo istnieje bezpieczniejsza funkcja: strcpy_s. 3) strcpy_s jest w najnowszym standardzie C11, więc z tym zacofaniem Visuala w C to nie tak do końca…
Endrju
Btw: strcpy nie jest deprecated w standardzie, a funkcje z dodatku K (Bounds-checking interfaces) są nieobowiązkowe.
robcio
  • Rejestracja:prawie 13 lat
  • Ostatnio:ponad 10 lat
  • Lokalizacja:Opole
  • Postów:533
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:

Kopiuj
 
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ć.


Nie odpowiadam na PW z prośbą o pomoc programistyczną.
edytowany 1x, ostatnio: robcio
vpiotr
  • Rejestracja:ponad 13 lat
  • Ostatnio:prawie 3 lata
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:

Kopiuj
 
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).

edytowany 1x, ostatnio: vpiotr
Olamagato
C najlepiej traktować jako "wysokopoziomowy" assembler. Przy takim podejściu jest wystarczająco "bezpieczny". :)
Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 3 godziny
0

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

Kopiuj
#include <stdio.h>
int main()
{
    float f = 3.14f;
    printf("%d\n", f);
}
Kopiuj
a.c:7:18: warning: format specifies type 'int' but the argument has type 'float' [-Wformat]
  printf("%d\n", f);
          ~~     ^
          %f
1 warning generated.
Zobacz pozostały 1 komentarz
Azarien
To jest Clang 3.2. Ale GCC 4.7.2 też daje warning (nie taki bajerancki), ale dopiero z -Wall. Visual 2012 niestety milczy.
vpiotr
VS2010 tak samo milczy... Ten Clang ma jakieś jeszcze zalety? Ostatnio widziałem że LLVM można wykorzystać do kompilacji C++ -> JavaScript - scenka opada: https://github.com/kripken/emscripten/
Azarien
Główną zaletą Clanga jest licencja BSD, bo GPL3 nie wszędzie się nadaje ;-) Niestety support pod Windows (MinGW) póki co leży i kwiczy, ja używam samodzielnie skompilowanej wersji (z własnym patchem), ale przy okazji ostatniej aktualizacji MinGWa coś zmienili w libstdc++ i programy w C++ kraszują (rekompilacja clanga z nową libką nie pomaga).
vpiotr
Może libstd++ doznało rozszczepienia jaźni? czyt. MinGW używa innej kopii binarek niż Clang?
vpiotr
Znalazłem słówko "Experimental" przy porcie na Windows. To chyba wiele wyjaśnia...
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.

vpiotr
Chyba chodzi mu o to że printf tylko wyświetla. Zapomniał o /etc/passwd, wyświetlaniu nie swojej pamięci i pewnie milionie innych rzeczy o których mają pojęcie tylko Ci co się włamują. http://seclists.org/bugtraq/1999/Sep/328

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.