Bei C++ kannst du im Gegensatz zu C beliebigen Code sowohl vor, als auch nach main() ausführen. Das kann schnell dazu führen, dass globale Variablen noch nicht initialisiert sind, wenn sie von einem Modul verwendet werden. Die STL führt massenhaft Code vor und nach main() aus, auch hinter der Bühne und vor allem dann, wenn du STL-Typen als globale Variablen einsetzt.

Wie gesagt, bei gutem alten C (ohne Plusplus) besteht dieses Problem in der Form überhaupt nicht.

Da es in deiner Frage um C++ und nicht C geht, solltest du vielleicht keine nackten Arrays, sondern std::vector in Erwägung ziehen. Aaaaaber, das wird dir u. U. um die Ohren fliegen, wenn du einen Vektor als globale Variable definierst, und von einer anderen Übersetzungseinheit darauf zugreifen willst.

Trotzdem erst mal, als schlechtes Beispiel:

/* header.hh */
#include <vector>

extern std::vector<int> buf; // <- mit "extern"

/* source.cc */
#include "header.hh"

std::vector<int> buf; // <- kein "extern"

/* modul1.cc */
#include "header.hh"

void func1() {
  buf.push_back(123);
}

/* modul2.cc */
#include "header.hh"

void func2() {
  buf.clear();
}

Das ist sehr schlecht und wird zu Bugs führen. Könnte aber auch sein, dass es problemlos funktioniert ... ist eben einfach sog. "undefiniertes Verhalten". :)

Globale Variablen solltest du deshalb immer in Funktionen einwickeln und nur eine Referenz darauf zurück geben:

/* header.hh */
#include <vector>

std::vector<int>& get_buf();

/* source.cc */
#include "header.hh"

std::vector<int>& get_buf() {
  static std::vector<int> buf;

  return buf;
}

/* modul1.cc */
#include "header.hh"

void func1() {
  get_buf().push_back(123);
}

/* modul2.cc */
#include "header.hh"

void func2() {
  get_buf().clear();
}

Mit dieser Vorgehensweise erschlägst du alle Probleme zwischen Modulen und unvertiger Initialisierung mit einem Schlag, wenn du bereit bist, dafür minimalen Overhead in Kauf zu nehmen, der sich in den meisten Situationen nicht weiter negativ bemerkbar machen wird.

Weil es in deiner Frage um C++ ging, bis hierher der C++ Teil. Da dein Code Beispiel aber eher C ist, und du ja an reinen Arrays interessiert bist, es aber trotzdem um C++ geht, ist die Aufgabenstellung deines Lehrers leider nicht trivial zu beantworten, so dass der Code auch zuverlässig und sicher funktioniert.

Im Großen und ganzen musst du einen globalen Zeiger mit Null initialisieren und eine Arraylänge als zusätzliche Variable ebenfalls mit 0 initialisieren. Dann musst du Funktionen drum herum bauen, die dynamisch Speicher reservieren und evtl. wieder freigeben, und sich um den ganzen Rest kümmern. Aber ohne ordentliche Kapselung wird das im Chaos enden.

Wenn du schon mit C++ arbeitest, baue dir mindestens eine anständige Klasse drum herum, welche die interne Buchführung übernimmt.

Ich glaube, deinem Lehrer ist überhaupt nicht klar, mit welchen subtilen Komplikationen bei dieser Aufgabenstellung zu rechnen ist. Ich möchte wetten, er unterschätzt die Fallstricke gewaltig, und hat mindestens die Hälfte der Nebeneffekte nicht bedacht. XD

LG, Sophie ^^

💡 Woher ich das weiß: Bjarne Stroustrup

...zur Antwort

Das hängt vom Aufbau der Anfrage ab. Wenn du diese manipulierst und irgend einen Fehler damit ausnutzt, reicht eine einzige. XD

Falls du hingegen in Skript-Kiddie-Manier einfach nur stupide GET-Requests abfeuerst, wird deine Bandbreite zu Hause vermutlich zum Flaschenhals, und du kannst gar nicht genügend Requests absetzen.

Außerdem befinden sich heutzutage viele Server hinter einem Loadbalancer, der die Anfragen auf viele Maschinen aufteilt. Aber bei einem Billighoster kannst du damit rechnen, dass ein PHP-Server mit irgendeinem überfetteten CMS (Wordpress, Joomla, Drupal, Typo3, ...) bei spätestens 1000 parallelen Anfragen zusammen bricht.

Wenn gutes Caching aktiv ist und die PHP-Seite leichtgewichtig ist, könnten es auch sein, dass du 10000 parallele Anfragen pro Sekunde benötigst, aber mehr macht in freier Wildbahn eigentlich kein PHP-Server mit.

Bei node.js brauchst du sogar noch etwas mehr, aber wenn es sich um einen Serververbund handelt, dann hast du mit deinem popeligen Hausanschluss sowieso keine Chance ... wie gesagt, es sei denn, du nutzt eine Sicherheitslücke aus. :)

LG, Sophie <3

💡 Woher ich das weiß: Sag ich nicht! :)

...zur Antwort

Fang klein an, und kompiliere erst mal NUR dieses winzige "Programm":

int main(void) {}

Das ist gültiger C++ Code, der zwar nix tut, aber daran erkennst du erst mal, ob der Compiler überhaupt funktioniert.

Als nächsten schritt versuche mal das hier zu kompilieren:

#include <iostream>

int main(void) {}

Dieses "Programm" tut auch überhaupt gar nichts, aber damit kannst du relativ schnell überprüfen, ob das Einbinden der Standard-Header funktioniert.

Falls alles geht, probierst du im nächsten Schritt "Hallo Welt" aus:

#include <iostream>

int main(void) {
  std::cout << "Hallo, Welt!\n";
}

Wenn alles bis hier hin funktioniert, dann liegt das Problem an anderer Stelle. (Programmierfehler deinerseits? Fremdbibliothek nicht gefunden? ...)

LG, Sophie ^^

...zur Antwort

Da ich selbst noch Anfängerin bin, fasse ich mal kurz zusammen, was mein Lehrer immer wieder zu diesem Thema sagt: ^^

C++ ist deutlich mächtiger als Java, aber Java hat mit Abstand die größere Standardbibliothek.

Wenn du allerdings bei Spielen nicht auf Engines angewiesen sein willst, bleibt dir gar keine andere Wahl als C++, weil du selbst in Java einen guten Teil der Engine sowieso in C++ schreiben und übers JNI zusammen kleben musst.

Allerdings bietet Java mit Swing (etwas älter) und JavaFX (top aktuell) gleich zwei sehr mächtige GUI-Frameworks von Hause aus, wobei man sagen muss, dass Oracle etwas Abstand von JavaFX zu nehmen scheint, um sich auf Swing zurück zu besinnen ... aus welchen Gründen auch immer. XD

Wenn du eine GUI mit C++ bauen willst, geht das, indem du entweder einen der größeren GUI-Frameworks (GTK, Qt, usw.) einsetzt, eine schlankere Alternative nutzt (z. B. FLTK), eine Wrapper-Bibliothek verwendest, die vieles verallgemeinert bzw. Abstrahiert (wxWidgets vielleicht) oder die nativen Systemschnittstellen nutzt (Win32 API o. ä.).

Alles in allem wirst du als Einsteiger mit Java schneller und einfacher die ersten Resultate aus dem Hut zaubern können, langfristig lässt dir C++ aber viel mehr Freiheiten an Stellen, an denen du mit Java einfach nicht mehr weiter kommst.

LG, Sophie <3

💡 Woher ich das weiß: Hab im Unterricht aufgepasst. ^^

...zur Antwort

Probier mal ...

sh /pfad/zum/skript.sh

... oder ...

bash /pfad/zum/skript.sh

aus! Dabei dürfte das Dateiattribut für die Ausführung (x) keine Rolle spielen.

Falls das nicht funktioniert, hast dein Dateisystem mit "noexec" gemountet, oder irgend eine Form von ACL verhindert die Ausführung. (Vorausgesetzt, du hast alle anderen Möglichkeiten aus der PHP Doku schon ausgeschlossen.)

Falls du kannst, schau einfach mal in die Logdatei(en).

LG, Sophie ^^

...zur Antwort

Falls du C++ nutzt und dir ...

if (a < b) {
  /* ... */
}

... zu kompliziert ist, dann gibt es Abhilfe:

#include <functional>

/* ... */

if (std::less<decltype(a)>{}(a, b)) {
  /* ... */
}

Die Funktionsobjekte sind ja eigentlich für Template-Programmierung gedacht, aber wenn jemand "größer als" und "kleiner als" durcheinander bringt, sieht das doch in dieser Form sicherlich gleich viiieeel übersichtlicher aus, oder? ;)

LG, Sophie ^^

...zur Antwort

Kann man nicht.

Du kannst die Frequenz des Grundtons imitieren, aber Wellenform und Obertöne haben mit einem Gitarrenklang nichts zu tun.

Genauso gut könntest du behaupten, dass man mit den Stimmbändern mehrere Oktaven einer Klaviatur imitieren könnte. Aber dieser Vergleich hinkt genauso.

LG, Sophie ^^

...zur Antwort

Neben GUI, Konsole und Dämonen fallen mir noch Treiber bzw. Kernelmodule ein. Außerdem gibt es noch dynamisch und statisch linkbare Bibliotheken. Und es gibt Betriebssysteme (insbes. Kernelimages), und den ROM-Inhalt eines eingebetteten Systems, auch in Form von Firmware.

Und, wenn man es denn hinzu zählen möchte, direkt ausführbarer Code im Bootsektor.

Aber im Grunde werden immer irgendwie Instuktionen im Speicher vermanscht, und in irgendeine Art von CPU gelutscht werden müssen. Ob diese nun der GPU sagen, dass sie bei nächster Gelegenheit doch bitte ein Fenster irgendwo hin pinseln darf oder der CPU sagen, dass es einen BIOS-Interrupt zur Anzeige eines Zeichens aufrufen soll, ist im Endeffekt grob das selbe. :)

LG, Sophie ^^

...zur Antwort
nur wie mach ich das?

Überhaupt nicht, denn der Anker-Teil wird überhaupt nicht an den Server gesendet.

Dir bleibt also nur die Möglichkeit über einen Umweg mit JavaScript.

LG, Sophie ^^

...zur Antwort

"Spanner" vielleicht. ^^

...zur Antwort

Das ist bei allen Jungs aus meiner Klasse so, und wir sind alle erst so 12 bis 13. ^^

Ich glaube, wenn es bei einem Jungen in dem Alter nicht so wäre, müsste man sich Sorgen machen. XD

LG, Sophie ^^

...zur Antwort

Ich tanze auch ab und zu mal mit meiner Freundin zu KPop, und wir nehmen das auch an ihrem iPhone auf, welches wir auf einen Plastik-Ständer für 3€ vom Media-Markt stellen. ^^

LG, Sophie <3

...zur Antwort

"Comptine d'Un Autre Été" vom Amelie-Soundtrack. ^^

...zur Antwort

Es ist nicht ganz klar, welches Ergebnis du exakt erwartest. ^^

Aber das hier dürfte dir weiter helfen:

import os, os.path

DIR_NAME = '/tmp'

# nur aktuelles Verzeichnis:
for entry in os.listdir(DIR_NAME):
	entry = os.path.join(DIR_NAME, entry)
	
	if os.path.isdir(entry):
		print(entry)

print('-' * 32)

# rekursiv alle Unterverzeichnisse:
for (root, dirs, files) in os.walk(DIR_NAME):
	for d in dirs:
		print(os.path.join(root, d))

Ach so, und, os.listdir() liefert die Verzeichniseinträge unsortiert. Falls du also eine hübsche alphabetische Sortierung haben willst, packe den Aufruf in ein sorted() ein.

LG, Sophie <3

...zur Antwort