Τα πάντα για την C

...του ubuntu και έργων ΕΛ/ΛΑΚ (Έργα-Οδηγοί-Προτάσεις)

Συντονιστής: konnn

Re: Τα πάντα για την C

Δημοσίευσηαπό pc_magas » 07 Απρ 2012, 15:46

@migf1
Απλά με την function απασχολείς stack με macro όχι ;)
My blog|Κυπριακή Κοινότητα Ελευθέρου Λογισμικού Λογισμικού ανοικτού Κώδικα
Γνώσεις Linux:Ποτέ αρκετές|Προγραμματισμός: Php, javascript, nodejs, python, bash |Aγγλικά:Καλά
Οι υπολογιστές μου:
Spoiler: show
Ubuntu 16.04 64 bit σεIntel(R) Pentium(R) CPU G4400 @ 3.30GHz, 16Gib Ram, 500Gib Hard Disk, και κάρτα γραφικών Nvidia Geforce GT610
Lubuntu 14.04 σε Dell Inspiron mini 10(1010) intel Atom Z500 1Gb ram και gma500 (εδώθη σε άλλον)
Kubuntu 16.04 Lenovo G70 Intel i5 Nvidia Grapgics Card, Intel Graphics card (έχει 2) με Nouveau, 16Gb RAM, 126GB SSD Σκληρό Δίσκο
Άβαταρ μέλους
pc_magas
powerTUX
powerTUX
 
Δημοσιεύσεις: 2599
Εγγραφή: 12 Απρ 2009, 18:55
Τοποθεσία: Αχαρναί Αττικής
Launchpad: pc_magas
IRC: pc_magas
Εκτύπωση

Re: Τα πάντα για την C

Δημοσίευσηαπό migf1 » 07 Απρ 2012, 15:57

pc_magas έγραψε:@migf1
Απλά με την function απασχολείς stack με macro όχι ;)

Ναι, αλλά με macro δεν κάνει type-checks ο compiler, οπότε ρισκάρεις bugs απροσεξίας.
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

Re: Τα πάντα για την C

Δημοσίευσηαπό Ilias95 » 07 Απρ 2012, 16:15

migf1 έγραψε:με την function απασχολείς stack

Τι ακριβώς σημαίνει αυτό;
Ilias95
saintTUX
saintTUX
 
Δημοσιεύσεις: 1548
Εγγραφή: 29 Απρ 2011, 23:26
Εκτύπωση

Re: Τα πάντα για την C

Δημοσίευσηαπό migf1 » 07 Απρ 2012, 16:23

Ilias95 έγραψε:
migf1 έγραψε:με την function απασχολείς stack

Τι ακριβώς σημαίνει αυτό;

Σε κάθε κλήση συνάρτησης δημιουργείται το λεγόμενο stack-frame στην stack της μνήμης. Αν θυμάσαι, όταν είχες γράψει πως προτίθεσαι να ξεκινήσεις C, σου είχα πει πως είναι καλή ιδέα πριν από οτιδήποτε άλλο να ρίξεις μια ματιά στο memory-layout των προγραμμάτων (και σου είχα δώσει links) ;)
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

Re: Τα πάντα για την C

Δημοσίευσηαπό Ilias95 » 07 Απρ 2012, 17:05

Έγινε, θα το δω και αυτό αργότερα μαζί με άλλα.

Στο μεταξύ έλυσα και τις ασκήσεις 10 και 18 (σελ.410-411).
Στην 18 (https://github.com/Ilias95/C-Exercises/ ... 16/ex_18.c) αποφάσισα να εκτυπώνω το chess table επίσης.
Γίνεται να γράψω τον initializer του table καλύτερα (στην 18);

Δοκίμασα να παραλείψω την δήλωση χρώματος στα μαύρα πιόνια λόγω ότι BLACK = 0, αλλά αν και δουλεύει σωστά παίρνω το παρακάτω warning:
Κώδικας: Επιλογή όλων
test1.c: In function ‘main’:
test1.c:45:9: προειδοποίηση: missing initializer [-Wmissing-field-initializers]
test1.c:45:9: προειδοποίηση: (near initialization for ‘table[0].color’) [-Wmissing-field-initializers]
Ilias95
saintTUX
saintTUX
 
Δημοσιεύσεις: 1548
Εγγραφή: 29 Απρ 2011, 23:26
Εκτύπωση

Re: Τα πάντα για την C

Δημοσίευσηαπό migf1 » 07 Απρ 2012, 17:23

Ilias95 έγραψε:Έγινε, θα το δω και αυτό αργότερα μαζί με άλλα.

Στο μεταξύ έλυσα και τις ασκήσεις 10 και 18 (σελ.410-411).
Στην 18 (https://github.com/Ilias95/C-Exercises/ ... 16/ex_18.c) αποφάσισα να εκτυπώνω το chess table επίσης.
Γίνεται να γράψω τον initializer του table καλύτερα (στην 18);

Δοκίμασα να παραλείψω την δήλωση χρώματος στα μαύρα πιόνια λόγω ότι BLACK = 0, αλλά αν και δουλεύει σωστά παίρνω το παρακάτω warning:
Κώδικας: Επιλογή όλων
test1.c: In function ‘main’:
test1.c:45:9: προειδοποίηση: missing initializer [-Wmissing-field-initializers]
test1.c:45:9: προειδοποίηση: (near initialization for ‘table[0].color’) [-Wmissing-field-initializers]

Το έχασα λιγάκι στην αρχικοποίηση του πίνακα... δεν πρέπει κάθε γραμμή να έχει δικά της ξεχωριστά άγκιστρα;
Το περνάει έτσι όπως το 'χεις τώρα χωρίς "near initialization" warning o compiler;
(όσο για το πως θα μπουν τα EMPTY, δεν έχω ιδέα :lol: πέρα δηλαδή από το να τα βάλω ένα-ένα στην αρχικοποίηση... αν δεν το ζήταγε η άσκηση επί τούτου, εγώ θα έβαζα τα EMPTY και BLACK να αντιστοιχούν με 0 και θα αρχικοποιούσα τον πίανκα σε άδειο...

Μορφοποιημένος Κώδικας: Επιλογή όλων
Square board[8][8] = { {.type=EMPTY, .color=BLACK} };

και μετά τα πιόνια θα τα έβαζα μέσω κάποιας συνάρτησης π.χ. board_init()
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

Re: Τα πάντα για την C

Δημοσίευσηαπό Ilias95 » 07 Απρ 2012, 17:40

Χρειάζεσαι επανάληψη, τα ξέχασες. :lol: :lol: :lol:

Η table είναι one-dimensional array που περιέχει structures οπότε απλά χρειάζονται άγκιστρα για την κάθε structure.
Τώρα απ' την στιγμή που χρησιμοποιώ initializer στην array, όσα στοιχεία δεν τα δηλώσω γίνονται αυτόματα 0.

Όπως είναι τώρα ο κώδικας είναι μια χαρά. Και δουλεύει κανονικά και δεν παίρνω warnings.
Απλά λέω μήπως μπορώ να κάνω πιο σύντομο το initialization.

Όταν χρησιμοποιείς initializers σε structures ισχύουν περίπου αυτά που ισχύουν και στις array, δηλαδή ότι αφήνεις κενό γίνεται αυτόματα 0.
Έτσι λέω στα μαύρα πιόνια να παραλείψω την explicit δήλωση του BLACK (αφού ούτως ή άλλως ισούται με 0).
Και όντως δουλεύει σωστά, αλλά παρ' όλα αυτά ο compiler μου δίνει τα παραπάνω warnings.
Ilias95
saintTUX
saintTUX
 
Δημοσιεύσεις: 1548
Εγγραφή: 29 Απρ 2011, 23:26
Εκτύπωση

Re: Τα πάντα για την C

Δημοσίευσηαπό migf1 » 07 Απρ 2012, 17:42

Α ρε συ, νόμιζα πως ήταν ορισμένος ως 2D ο πίνακας (μα λέω κι εγώ :lol:)

Το άλλο με τα αυτόματα EMPTY στη μέση του πίνακα, όντως δεν το θυμόμουν (είναι ANSI ή C99; )
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

Re: Τα πάντα για την C

Δημοσίευσηαπό Ilias95 » 07 Απρ 2012, 17:47

migf1 έγραψε:Το άλλο με τα αυτόματα EMPTY στη μέση του πίνακα, όντως δεν το θυμόμουν (είναι ANSI ή C99;)

C89 είναι. Όποιο στοιχείο παραλείπεις γίνεται αυτόματα 0.
Οι designated initializers είναι C99 όμως. Δηλαδή το "[48] =" που χρησιμοποιώ για να δηλώσω το 48ο στοιχείο της array.
Ilias95
saintTUX
saintTUX
 
Δημοσιεύσεις: 1548
Εγγραφή: 29 Απρ 2011, 23:26
Εκτύπωση

Re: Τα πάντα για την C

Δημοσίευσηαπό migf1 » 07 Απρ 2012, 17:54

Ναι, αυτό το [48]= δεν θυμόμουν (σε 2D array πως λειτουργεί; ).

Σε ότι αφορά τα warnings, η Pelles C δεν τα βγάζει, ο gcc τα βγάζει όμως.
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

ΠροηγούμενηΕπόμενο

Επιστροφή στο Ανάπτυξη Λογισμικού / Αλγόριθμοι