Несколько причин, по которым не следует использовать глобальные объекты и массивы слишком широко, например:
Во-первых, функции, которые используют глобальные объекты, не очень многократно используются. Идентификаторы жестко закодированы в исходном коде. Это делает использование функции практически уникальным, что, как правило, не лучшее решение. Напротив, параметры позволяют передавать значения из объектов разных идентификаторов, а в случае указателей также адреса из массивов разных размеров.
То же самое относится и к обратному процессу возврата значений и указателей из функций, как в вашем случае. Обратите внимание, что внутри функции объект должен быть объявлен со спецификатором класса хранения static
, чтобы оставаться в памяти после окончания выполнения функции, что важно в случае возврата указателя на локальный объект функции.
Строковый литерал "Hello With Array"
существует вне выполнения функции MyWordArr()
, поскольку строковые литералы находятся в памяти до завершения программы.
Во-вторых, ваш код может стать трудным для чтения и обслуживания для других, но также и для себя, когда исходный код очень велик и, например, после нескольких сотен вызовов функций вы потеряли немного изысканного обзора и можете спросить себя: «Что на самом деле делает функция?» - в отличие от этого, переданные параметры и возвращаемые значения описывают намерение и контекст использования вызова функции довольно хорошо.
В-третьих, к объекту можно получить доступ практически из любого места кода, что затрудняет поиск причины непреднамеренного изменения в большой программе.
В-четвертых, глобальные объекты не являются поточно-ориентированными.
Итак, заключение:
Зависит от случая использования. В приведенном вами примере это может хорошо сработать, поскольку программа небольшая и целенаправленная, но в целом вы должны стараться (если это возможно) избегать глобальных объектов, поскольку производственный код в большинстве случаев очень большой и имеет тенденцию разбивать мозги сам по себе.