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

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

 

Программа на языке Си состоит из одной или более подпрограмм, называемых функциями.

Язык Си является блочно-структурированным. Каждый блок заключается в фигурные скобки {}.

Основным блоком в программе консольного приложения на языке Си является главная функция, имеющая имя main().

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

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

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

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

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


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

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

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

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

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

 
float b; // вещественная переменная

 

Главная функция

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

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

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

  • int main()
  • void main().

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

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

 
return 0; // вещественная переменная

 
В фигурные скобки заключены описания и операторы.

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

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

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

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

Теперь попробуем написать текст на русском языке.
1
2
3
4
5
6
7
#include <stdio.h>
int main()
{
  printf("Здравствуй, мир!");
  getchar();
  return 0;
}

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

При этом текст программы будет выглядеть следующим образом:
1
2
3
4
5
6
7
8
9
10
#include <stdio.h>
#include <stdlib.h>
int main()
{
  system("chcp 1251"); // Текущая кодовая страница 1251
  system("cls"); // Очистка консоли
  printf("Здравствуй, мир!"); // Вывод сообщения
  getchar();
  return 0;
}

Результат работы программы:
Результат работы Здравствуй, мир!


Назад: Язык Си

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


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

      Такая конструкция прекрасно работает на вывод, но не работает на ввод.
      Строку на русском языке ввести не удастся 🙁


  • Лично у меня указанный способ подключения русской локализации в последней версии 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 не будет опубликован. Обязательные поля помечены *