этот вопрос выглядит знакомым, но поверьте мне, на самом деле это не так! Позвольте мне объяснить, почему. Речь идет не о сохранении функции в заголовочном файле, а о включении и вызове ее. Пример ясно проиллюстрирует мой запрос, так что здесь мы идем: у меня есть программа, подобная следующей:
#include whatever_should_be_included
int main()
{
whatever-1
whatever-2
whatever-3
.
.
.
}
Все эти коды являются кодами в программе, в том числе if
условия, loop
и действительно что угодно. Я хочу техбез разницыдля сохранения в файлах, скажем простые текстовые файлы или какое расширение необходимо, скажемexten
«будьте расширениями, тогда я хочу сохранить их как:
chunk-1.exten
, chunk-2.exten
, …. и т.д. файлы, которые будут содержать: whatever-1
, whatever-2
… и т. д. куски строк кода и моя программа теперь должны выглядеть так:
#include whatever_should_be_included
#include those_chunks_maybe
int main(){
chunk-1.exten; //or whatever syntax necessary
chunk2.exten;
chunk-3.exten;
.
.
.
}
Я новичок в C ++ и в программировании в целом, поэтому, пожалуйста, будьте осторожны со мной 🙂 пошаговый четкий ответ с небольшим количеством объяснений будет очень признателен.
Я использую Ubuntu 16.04
Мой компилятор g ++, хотя я не использую его напрямую, я компилирую или, скорее, загружаю программы внутри Корень Церна оболочка, как корневые макросы.
Конечно, лучший способ — это использовать функции и заголовки, но это не значит, что мы не можем исследовать эту особенность разбивки простого кодового текста на различные файлы и включения их в основной! Я хотел изучить это, и я не понимаю, как изучение этой (хотя и скучной) функции неправильно !! Почему именно голосование отрицательное? Вредит ли этот вопрос людям? Разве это не любопытно и продвигать знания?
Я немного расскажу о том, как ты можешь, но сначала я скажу, что ты, вероятно, не должен. Я не знаю вашего приложения, и, возможно, у вас действительно есть веская причина, но это противоречит типичной структуре языка и скорее вызовет проблемы с удобочитаемостью и обслуживанием, чем решение какой-либо основной проблемы, которая движет вопросом. ,
Тем не менее, в C ++ директивы, которые начинаются с #
предназначены для «препроцессора», который изменяет код перед компиляцией. Особенно #include
вместо директивы копирует содержимое другого файла, чтобы все компилировалось. Обычно (и IMO наиболее правильно) используется для извлечения заголовков, но может использоваться для чего угодно.
По общему правилу, вы правы, считая, что ваши «чанки» не должны заканчиваться на .c, или .cpp, или .h; потому что это подразумевает определенные вещи о структуре того, что внутри. Я думаю, вы можете создать расширение, если оно не противоречит ни одному стандарту.
Так что если у вас есть chunk1.cfragment
или что-то в этом роде, и это whatever-1
, то файл верхнего уровня .cpp будет выглядеть так
#include whatever_should_be_included
int main(){
#include "chunk1.cfragment";
#include "chunk2.cfragment";
#include "chunk3.cfragment";
. . .
}
Я не помню (и это может зависеть от вашего компилятора), можете ли вы иметь пробел в начале строки перед директивой #include; если нет, то это еще один способ сделать ваш код безобразным (но это далеко не самая серьезная проблема с читабельностью здесь).
Обратите внимание, что здесь вы используете кавычки для включенного имени файла, а не угловые скобки, как в случае с системной библиотекой.
ОБНОВИТЬ — Исходя из ваших комментариев к ответу Роберта, кажется, что вы действительно ищете глобально видимые / модифицируемые переменные. Опять же, я скажу, что это обычно не самая лучшая вещь, но если вам это нужно, есть лучшие способы получить это, чем объединять фрагменты кода в одну массивную функцию.
Обычно лучше, чем создавать глобальные данные, — передавать параметры между функциями по мере необходимости. Но если у вас есть данные, которые нужны буквально везде, вы можете сделать это с помощью глобальных переменных.
В общем случае функции могут иметь общий доступ к глобальным переменным — объявленным вне какой-либо функции. Чтобы поделиться ими между файлами кода, вам необходимо предоставить extern
объявления во всех файлах (и фактическое определение переменной ровно в одном кодовом файле). Лучше всего с заголовками.
Это было долго время, так что у меня могут быть некоторые детали немного здесь, но это будет выглядеть примерно так:
File1.h
===========================================
extern int a;
===========================================
File2.h
===========================================
void otherFunction();
===========================================
File1.cc
===========================================
#include "File1.h"#include "File2.h"
int a;
int main() {
otherFunction();
}
===========================================
File2.cc
===========================================
#include "File1.h"#include "File2.h"
void otherFunction() {
// do something with a
}
===========================================
Даже если вы думаете о «фрагментах кода», вы будете счастливее, если будете выражать их как функции.
файл: what1.hpp
#pragma once
inline whatever1(int& arg)
{
// code
}
файл: main.cpp
#include <iostream> // say...
#include "whatever1.hpp"
int main() {
int some_variable;
whatever1(some_variable);
// ... etc
}