Структура программы на языке Си

Язык Си / Структура программы на языке Си

Программа на языке Си состоит из одной или более подпрограмм, называемых функциями. Язык Си является блочно-структурированным. Каждый блок заключается в фигурные скобки {}. Основным блоком в программе консольного приложения на языке Си является главная функция, имеющая имя main().

Каждое действие в языке Си заканчивается символом "точка с запятой" - ;. В качестве действия может выступать вызов функции или осуществление некоторых операций.

Имя функции — это коллективное имя группы описаний и операторов,
заключенных в блок (фигурные скобки). За именем функции в круглых скобках указываются параметры функции.

Комментарии в языке Си

В языке Си  для комментариев используются символы

/* - начало комментария;
*/ - конец комментария.

Вся последовательность, заключенная между этими символами, является комментарием.

Это удобно для написания многострочных комментариев:

int a;   /* целая
переменная */

Многострочные комментарии также удобно использовать при отладке для сокрытия от выполнения части кода.

В дополнение к этому, для написания коротких комментариев могут использоваться символы //. При этом комментарием является все, что расположено после символов // и до конца строки:

float b; // вещественная переменная
Главная функция

При выполнении консольного приложения, написанного на языке Си, операционная система компьютера передаёт управление функции с именем main(). Функцию main() нельзя вызывать из других функций программы, она является управляющей.

Следующие за именем функции круглые скобки предназначены для указания параметров (аргументов), которые передаются в функцию при обращении к ней. В данном случае операционная система не передаёт в функцию main() никаких аргументов, поэтому список аргументов в круглых скобках пустой.

Главную функцию можно записать по-разному:

  • int main()
  • void main().

Перед именем функции указывается тип возвращаемого значения. При обращении к главной функции значение возвращается операционной системе. Последняя запись не будет возвращать значения. Однако void main() - не совсем корректная запись, так как сообщает компилятору, что функция main() не возвращает никакого значения. При этом запись int main() сообщает компилятору о возвращении целочисленного значения, которое необходимо операционной системе и сообщает ей о том, что программа завершилась корректно. Если же это значение не возвращено, то операционная система понимает, что программа завершилась в аварийном режиме. Для возврата целочисленного значения перед завершением функции дописывается строка

return 0;

В фигурные скобки заключены описания и операторы, которые в данном случае обеспечивают вывод на экран сообщения "Здравствуй, мир!".
В общем случае программа может содержать несколько функций. Каждая функция имеет список передаваемых в нее параметров, указанный в круглых скобках, и набор операций, заключенных в блок, ограниченный фигурными скобками.

Пример: Вывод на экран сообщения "Hello, world!".

#include <stdio.h>       // Подключение библиотеки ввода-вывода
int main()              // Главная функция
{
  printf("Hello, world!"); // Вывод сообщения
  getchar();               // Задержка окна консоли
  return 0;
}

Результат работы программы:
Результат работыТеперь попробуем написать текст на русском языке.

#include <stdio.h>
int main()
{
  printf("Здравствуй, мир!");
  getchar();
  return 0;
}

Результат работы программы:
Результат работы

Проблема русского языка в консольных приложениях заключается в том, что консоль и редактор кода Microsoft Visual Studio поддерживают разные кодовые страницы. Для того, чтобы увидеть русские символы в консоли необходимо поменять кодовую страницу в консоли, чтобы она соответствовала кодовой странице редактора (1251). С этой целью вызывается функция system("chcp 1251") с соответствующей командной строкой. Прототип функции system() содержится в библиотеке <stdlib.h>.

При этом текст программы будет выглядеть следующим образом:

#include <stdio.h>
#include <stdlib.h>
int main()
{
  system("chcp 1251");        // Текущая кодовая страница 1251
  system("cls");              // Очистка консоли
  printf("Здравствуй, мир!"); // Вывод сообщения
  getchar();
  return 0;
}

Результат работы программы:
Русский язык в консоли Си

Назад

Комментариев к записи: 4

  • Лично у меня указанный способ подключения русской локализации в последней версии DevC++ не работает.

    Зато работает это:
    #include <locale.h>

    int main{

    setlocale(LC_ALL, «Rus»);

    }
    Это код из Си или уже Си++? Если Си++, то как сделать это в Си?


    • Елена Вставская

      Заголовочный файл locale.h, судя по описанию, является стандартным заголовочным файлом языка Си.
      Существует множество способов смены кодовой страницы для воспроизведения русского языка в консоли. И я использую лишь один из них, который работает в Microsoft Visual Studio (проверено c 2005 по 2015 версии).


      • Понимаю, разница в IDE, но в том же QT Creator не нужно прописывать
          system(«chcp 1251»);        // Текущая кодовая страница 1251
          system(«cls»);              // Очистка консоли
        Там сразу выводит на русском.

        Меня интересует конечный результат, который видит пользователь, когда запускает .exe и видит что-то на экране, если в IDE всё работало после отладки, то и у пользователя тоже будет работать?


        • Елена Вставская

          Да, у пользователя тоже должно все работать. Чтобы это проверить достаточно запустить на выполнение .exe файл из папки, куда он выгрузился компилятором (минуя IDE).


Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *