C Probleem
14 mei 2008 - 18:04   
geplaatst door: stijnschoor
Laatst bedacht ik dat het goed idee was om mijn kennis van C een beetje uitebreiden.
Ik schreef een simpel programmaatje maar kreeg niet het gewenste resultaat.
Het is de bedoeling dat ik een function maak die de getallen tussen de aanhalingstekens print.
Kijk maar:


#include "stdio.h"


void show(int first, int second)
{

printf("First is\n", first);
printf("Second is\n", second);

}


int main (int argc, const char * argv[]) {
 
show(100, 100);
printf("Hello, World!\n");
   return 0;
}


Ik krijg alleen geen 100 als resultaat, de plek waar hij hoort te staan blijft leeg.

Wat moet ik doen?

Alvast bedankt

P.S. Achter #include hoort stdio.h tussen hoekige aanhalings tekens te staan, maar dat schijnt nu niet te lukken

"What's in a name that we call a mac"
Shakespeare
C Probleem
14 mei 2008 - 20:32    reactie #1
geplaatst door: McLangendorff
printf("First is %d\n", first); /* Added %d to print the variable */
iMac 24", ATV-2, Mac Mini, iPhone 4S, iPad-2, iPhone 3GS, 2xiMac G3, iBook G3 Clamshell, Performa SE/30, iPod Video 60Gb, iPod Nano 3rd 4Gb
C Probleem
15 mei 2008 - 09:21    reactie #2
geplaatst door: TGV

Citaat
McLangendorff om 20:32, 14-05-2008
printf("First is %d\n", first); /* Added %d to print the variable */

Geheel correct (al moet je het commentaar natuurlijk niet overnemen).

Nog een paar puntjes:
- gebruik #include <stdio.h> (dus <> ipv "")
- zorg voor consequent inspringen en plaatsen van de accolades, dat houdt je code leesbaarder; veel editors kunnen je een handje helpen

C Probleem
15 mei 2008 - 15:59    reactie #3
geplaatst door: stijnschoor
Bedankt! :thumbs-up:
Het is probleem is opgelost.

Nog even een vraagje, weten jullie een goede GUI (voor C) die goed met XCode werkt en makkelijk te installeren is?
wxWidgets en QT heb ik al geprobeerd maar is me niet gelukt in Xcode te zetten (ondanks tutorials)  :cry:  

Bedankt!

"What's in a name that we call a mac"
Shakespeare
C Probleem
15 mei 2008 - 22:37    reactie #4
geplaatst door: McLangendorff
Ik gebruik eigenlijk altijd vim met syntax highlightning. Misschien dat eclipse voor het doel geschikt is, je kan hiervoor c/c++ interface installeren en koppelen aan make/gcc/etc

Andere tip: http://www.cppreference.com/ hier is veel C++ maar ook C info te vinden!

iMac 24", ATV-2, Mac Mini, iPhone 4S, iPad-2, iPhone 3GS, 2xiMac G3, iBook G3 Clamshell, Performa SE/30, iPod Video 60Gb, iPod Nano 3rd 4Gb
C Probleem
15 mei 2008 - 23:03    reactie #5
geplaatst door: MacSea
Heb geen ervaring met C (eigenlijk wel maar dat is meer dan 10 jaar geleden), maar ik ben heel tevreden van TextMate voor Ruby on Rails, HTML, Javascript,... en er is ook een C bundle dus proberen maar zou ik zo zeggen.
mvg Glenn Verhalle • Administratieve software voor reclame- en communicatie bedrijven: http://www.thinx.be
C Probleem
16 mei 2008 - 10:19    reactie #6
geplaatst door: TGV
stijnschoor bedoelt een bibliotheek/toolkit/... om GUIs mee te bouwen. Ik heb zelf ooit wxWidgets op de mac aan de praat gekregen, maar dat was in een grijs verleden en de laatste keer is het mij ook niet gelukt. Als het je lukt, is het wel een erg mooi pakket. Qt heb ik nooit geprobeerd.

Maar alle bibliotheken die als gecompileerde bibliotheek bestaan kunnen binnen XCode gebruikt worden, want XCode is niets anders dan een editor en project-manager om gcc en ld en dat soort tools heen.

Verder is Cocoa natuurlijk de echte, "native" GUI-bibliotheek voor OSX programma's. Er zijn genoeg tutorials voor. Vooral de wat geavanceerdere onderdelen (key-value binding, core data, etc.) zijn erg fijn om mee te werken. Nadeel: het draait alleen op OSX.

Maar voor wxWidgets is er goed nieuws: het is beschikbaar via DarwinPorts: http://wxwidgets.darwinports.com/. Als je eenmaal de basis van darwinports geïnstalleerd hebt, kun je probleemloos alle ports installeren en up-to-date houden (darwinports is een soort packet manager a la RPM). Het commando om wxwidgets te installeren is: sudo port install wxwidgets, eenvoudiger kan het niet. Wel moet je dan even goed zoeken waar alles staat (waarschijnlijk in /opt/local).

C Probleem
16 mei 2008 - 14:49    reactie #7
geplaatst door: stijnschoor
Bedankt voor de adviezen.

Cocoa ken ik al vrij goed en ik heb hier dan ook al meerdere programma's mee gemaakt.
Het nadeel is dat het niet in C kan.
Ik zal kijken of wxWidgets nu lukt.

"What's in a name that we call a mac"
Shakespeare
C Probleem
17 mei 2008 - 11:51    reactie #8
geplaatst door: stijnschoor
snik, het lukt niet  :cry:

Maar even serieus, ik krijg errors over van alles en nog wat.

Weet iemand waar de libraries van wxWidgets zijn, ik heb het ooit geweten maar ik ben het nu weer kwijt.

Nog een laatste vraag, Als ik in Xcode bij Targets-->Get Info-->Build-->Header Search Path; iets invul bouwt hij dat mee waardoor ik vaak duizenden(letterlijk!) errors krijg. Kan ik die ook niet mee laten compilen?

"What's in a name that we call a mac"
Shakespeare
C Probleem
17 mei 2008 - 13:35    reactie #9
geplaatst door: McLangendorff
cd / && find . | grep wxWid om te zoeken. Waarschijnlijk staan ze ergens in /usr/lib/...
iMac 24", ATV-2, Mac Mini, iPhone 4S, iPad-2, iPhone 3GS, 2xiMac G3, iBook G3 Clamshell, Performa SE/30, iPod Video 60Gb, iPod Nano 3rd 4Gb
C Probleem
17 mei 2008 - 13:54    reactie #10
geplaatst door: TGV

Citaat
stijnschoor om 11:51, 17-05-2008
snik, het lukt niet  :cry:

Maar even serieus, ik krijg errors over van alles en nog wat.

Weet iemand waar de libraries van wxWidgets zijn, ik heb het ooit geweten maar ik ben het nu weer kwijt.

Nog een laatste vraag, Als ik in Xcode bij Targets-->Get Info-->Build-->Header Search Path; iets invul bouwt hij dat mee waardoor ik vaak duizenden(letterlijk!) errors krijg. Kan ik die ook niet mee laten compilen?


Ten eerste: waarover krijg je errors? Bij het bouwen van wxWidgets (dus bij het port commando)?

Als het port commando succesvol is, dan moet je met het find/grep-commando hierboven (of het equivalente commando: find / -name 'wxWid*') kunnen vinden waar de files weggeschreven zijn.

Je moet dan de directory waarin de directory wx staat toevoegen aan de "search paths". Standaard zijn de includes voor een wx-applicatie namelijk iets als

#include "wx/wx.h"

dus moet de compiler weten waar "wx" staat. Daarnaast moet je juiste bibliotheek toevoegen aan je project, anders krijg je fouten van het type "unknown symbol: _wxMessageDialog" bij het linken (dus na een succesvolle compilatie).

Overigens moet je je realiseren dat je geen wx-files kunt includen vanuit een c programma, aangezien wx helemaal C++ gebaseerd is. Dat zou je foutmeldingen kunnen verklaren.

C Probleem
17 mei 2008 - 14:38    reactie #11
geplaatst door: stijnschoor
Allereerts bedankt voor de tips

Ik heb een C++ project gemaakt en er de wxWidgets libraries aantoegevoegd, ook de include bestanden zijn gevonden en als search path opgegeven. Het probleem is nu dat ik nu errors binnen de wxWidgets libraries krijg.


wxMac-2.8.7/include/wx/string.h:164:4: error: #error "Please define string case-insensitive compare for your OS/compiler

wxMac-2.8.7/include/wx/defs.h:1015: error: conflicting declaration 'typedef wxInt32 ssize_t'

/usr/include/string.h:70: error: 'ssize_t' has a previous declaration as 'typedef __darwin_ssize_t ssize_t'


Als iemand het project wil bekijken zal ik het uploaden.

wxWidget ben ik met sudo opnieuw aan het bouwen, De error kwam doordat internet uitviel.  :music:

"What's in a name that we call a mac"
Shakespeare
C Probleem
17 mei 2008 - 16:09    reactie #12
geplaatst door: stijnschoor
port is gelukt. Klopt het dat er meerdere libraries zijn? Het command grep is ook gelukt. Nu alleen nog kijken of het lukt met het project maken.

(Bewerkt door stijnschoor om 19:10, 17-05-2008)

"What's in a name that we call a mac"
Shakespeare
C Probleem
17 mei 2008 - 16:23    reactie #13
geplaatst door: TGV
Er kan een develop en een release bibliotheek zijn, een 32 en een 64 bits, een ppc en een intel, of alle combinaties (dat zouden er al 8 acht zijn). Als het goed is, is er echter maar een directory met de header files.
C Probleem
18 mei 2008 - 14:23    reactie #14
geplaatst door: stijnschoor
Helaas het is niet gelukt :mad:
ik denk dat ik het maar bij Cocoa/GLUT/SWT hou. Maar als iemand nog andere GUI toolkit's weet hoor ik dat graag.
"What's in a name that we call a mac"
Shakespeare
C Probleem
18 mei 2008 - 15:16    reactie #15
geplaatst door: stijnschoor
Ik heb Fltk ondekt. Een makkelijk te installer GUI. Nu heb ik hetzelfde probleem als bij wxWidgets. Xcode herkent het header bestand (Fl/Window.h) niet. Wat moet ik includen? Kan iemand dat uitleggen? Of is er een goede tutorial voor? De Library is een .a maakt dit uit? Als dit kan lukken kan wxWidgets misschien ook lukken

Alvast bedankt

"What's in a name that we call a mac"
Shakespeare
C Probleem
19 mei 2008 - 09:51    reactie #16
geplaatst door: TGV
Voer dit commando eens uit:

find / -name Window.h | fgrep Fl/Window.h

Als het goed is, krijg je na een tijdje gepruttel een pad, iets als /usr/local/.../Fl/Window.h. Het stuk *VOOR* Fl/Window.h voeg je toe aan je XCode instellingen (Rightclick Target > Get Info > Build > All Configurations > Search Paths). Als je includes met vishaken gebruikt (#include <Fl/...>) dan voeg je de directory toe aan "Header Search Paths", als je aanhalingstekens gebruikt (#include "Fl/...") dan aan "User Header Search Paths". En let wel: de laatste "/Fl/Window.h" moet van het zoekpad weggehaald worden.

C Probleem
19 mei 2008 - 15:03    reactie #17
geplaatst door: stijnschoor
:worship: Eer aan TGV :worship:

Bedankt! Dat was precies wat ik nodig had!
:happy:

Het lukt me eindelijk, zelfs met Qt!

Bewijs:

Bedankt iedereen!

(Bewerkt door stijnschoor om 18:15, 19-05-2008)

"What's in a name that we call a mac"
Shakespeare
C Probleem
20 mei 2008 - 18:33    reactie #18
geplaatst door: stijnschoor
Nog een laatste vraag:
Hoe verander ik mijn programma icoon in XCode? In Objective-C is dit vrij gemakkelijk, maar met C++ heb ik er meer moeite mee.
Ik gebruik Qt, misschien is het met Qt mogelijk?

Alvast bedankt

"What's in a name that we call a mac"
Shakespeare
C Probleem
20 mei 2008 - 20:03    reactie #19
geplaatst door: TGV
Als het goed is staat het icon in de property list van je target (klik target > get info > properties > icon file). Je hebt daarvoor wel een icon in het goed formaat *en* een unieke identifier nodig.
C Probleem
21 mei 2008 - 15:08    reactie #20
geplaatst door: stijnschoor
Helaas werkt dit niet. Bij Target > Get Info staat geen properties. Misschien komt dit doordat ik als template een C++ standard tool heb gekozen? Is dit nog te veranderen?
"What's in a name that we call a mac"
Shakespeare
C Probleem
21 mei 2008 - 15:52    reactie #21
geplaatst door: TGV
Het probleem is dat je een "package" moet maken. Een standaard C++ programma is een (simpele) binary, een OSX applicatie is een directory met resources, waarvan de binary er een is en Info.plist een ander. Een nieuw Carbon project aanmaken en daar alle overbodigheden uitgooien en je eigen sources en libs erin stoppen lijkt mij de makkelijkste manier.
C Probleem
21 mei 2008 - 17:08    reactie #22
geplaatst door: stijnschoor
Gelukt!
Ik heb een Carbon project aangemaakt, de main.c in cpp veranderd en de overboodige "zooi" er uitgegooid.

Bedankt!

P.S. Nog een klein vraagje, wat is de functie van een class? Ik snap dat hij variabelen bevat maar dan kan het toch net zo goed een struct zijn?

(Bewerkt door stijnschoor om 20:12, 21-05-2008)

"What's in a name that we call a mac"
Shakespeare
C Probleem
21 mei 2008 - 19:02    reactie #23
geplaatst door: TGV
In C++ is "struct { ... };" hetzelfde als "class { public: ... };". Ik weet eigenlijk niet eens of je in een struct wel private en protected members kunt hebben. Volgens Wikipedia kan het wel: http://en.wikipedia.org/wiki/C%2B%2B_structures_and_classes.
C Probleem
22 mei 2008 - 15:17    reactie #24
geplaatst door: stijnschoor
Ik heb het een doorgelezen en iets geprobeerd alleen krijg ik een error:

#include <iostream>

using namespace std;

// de class SObject
class SObject {
public:
int age;
static void setAge(int a);
static void showAge();
};

// functie voor de leeftijd
static void setAge(int a)
{
int age = a;
printf("age is %d", age);
}


// functie waar een nieuw object wordt gemaakt en de leeftijd wordt ingesteld
void man()
{
SObject *newObject;
newObject->setAge(14);
}

int main (int argc, char * const argv[]) {
   man();
   return 0;
}

en nu de error:

ZeroLink: unknown symbol '__ZN7SObject6setAgeEi'

Misschien is het een domme vraag of heb ik de klok horen luiden maar de klepel niet kunnen vinden maar wat doe ik niet goed?

P.S. Sorry voor de onduideijke code, als je iets in code tags zet wordt bijna alles naar de kant geduwt.

(Bewerkt door stijnschoor om 18:31, 22-05-2008)

"What's in a name that we call a mac"
Shakespeare