Split Code to Multiple (source / header) Files in c and c++ on Linux (bash) 13

Опубликовано: 01 Май 2026
на канале: Arif Mahmood
306
1

Shows how to manage code with #multiple #header and #source files in c and c plus plus #projects on #Linux/#unix. Shows how to #divide/#split code into #separate files and to #run and #compile c and c plus plus #programs on #bash.


c code:

//main.c is one source file

#include<stdio.h>
#include<string.h>
#include "Header.h"

//void pullout_contents(char *in_file, char elements[][50]);
//void show_contents(const char elements[][50]);
//void pushin_contents(char out_file[], const char elements[][50]);

int main()
{
char in_file[] = "test.txt";

char out_file[] = "test.txt.out";

char elements[25][50];

pullout_contents(in_file, elements);

show_contents(elements);

pushin_contents(out_file, elements);

getch();
return 0;
}

//Program.c is another source file

#include<stdio.h>
#include<string.h>
void pullout_contents(char *in_file, char elements[][50])
{
FILE *input_file = fopen(in_file, "r");

char line[50];
for (int line_no = 1; fgets(line, sizeof(line), input_file) != NULL; ++line_no)
{
strcpy(elements[line_no], line);
}

fclose(input_file);
}

void show_contents(const char elements[][50])
{
for (int line_no = 1; line_no <3; ++line_no)
{
printf("%s", elements[line_no]);
}
}

void pushin_contents(char out_file[], const char elements[][50])
{
FILE* output_file = fopen(out_file, "w");//w for write a for append

for (int line_no = 1; line_no <3; ++line_no)
{
fprintf(output_file, "%s", elements[line_no]);
}

fclose(output_file);
}

//Header.h is a header file

#pragma once

#ifndef ELEMENTS
#define ELEEMNTS
void pullout_contents(char *in_file, char elements[][50])
{
FILE *input_file = fopen(in_file, "r");

char line[50];
for (int line_no = 1; fgets(line, sizeof(line), input_file) != NULL; ++line_no)
{
strcpy(elements[line_no], line);
}

fclose(input_file);
}

void show_contents(const char elements[][50])
{
for (int line_no = 1; line_no <3; ++line_no)
{
printf("%s",elements[line_no]);
}
}

void pushin_contents(char out_file[], const char elements[][50])
{
FILE* output_file = fopen(out_file, "w");//w for write a for append

for (int line_no = 1; line_no <3; ++line_no)
{
fprintf(output_file, "%s", elements[line_no]);
}

fclose(output_file);
}


#endif // !ELEMENTS

Linux Commands:
$ gcc *.c -o main
Or
$ gcc main.c -o main
$ ./main test.txt

c++ code:

//Source.cpp is a source file

#include <iostream> //for cout
#include <fstream> // for ofstream/ifstream
#include <string> //for << and getline
#include "Header.h"

//void pullout_contents(std::string in_file, std::string elements[]);
//void show_contents(const std::string elements[]);
//void pushin_contents(std::string out_file, const std::string elements[]);

int main()
{
std::string in_file = "test.txt";

std::string out_file = "test.txt.out";

std::string elements[100];

pullout_contents(in_file, elements);

show_contents(elements);

pushin_contents(out_file, elements);

std::cin.get();
return 0;
}

//Program.cpp is another source file

#include <iostream> //for cout
#include <fstream> // for ofstream/ifstream
#include <string> //for << and getline

void pullout_contents(std::string in_file, std::string elements[])
{
std::ifstream input_file(in_file.c_str());

std::string line;
for (int line_no = 1; std::getline(input_file, line); ++line_no)
{
elements[line_no] = line;
}

input_file.close();
}

void show_contents(const std::string elements[])
{
for (int line_no = 1; line_no < 3; line_no++)
{
std::cout << elements[line_no] << std::endl;
}
}

void pushin_contents(std::string out_file, const std::string elements[])
{
std::ofstream output_file(out_file.c_str());

for (int line_no = 1; line_no < 3; line_no++)
{
output_file << elements[line_no] << std::endl;
}

output_file.close();
}

//Header.h is a header file

#pragma once

#ifndef ELEMENTS
#define ELEMENTS

//void pullout_contents(std::string in_file, std::string elements[]);
//void show_contents(const std::string elements[]);
//void pushin_contents(std::string out_file, const std::string elements[]);


void pullout_contents(std::string in_file, std::string elements[])
{
std::ifstream input_file(in_file.c_str());

std::string line;
for (int line_no = 1; std::getline(input_file, line); ++line_no)
{
elements[line_no] = line;
}

input_file.close();
}

void show_contents(const std::string elements[])
{
for (int line_no = 1; line_no < 3; line_no++)
{
std::cout << elements[line_no] << std::endl;
}
}

void pushin_contents(std::string out_file, const std::string elements[])
{
std::ofstream output_file(out_file.c_str());

for (int line_no = 1; line_no < 3; line_no++)
{
output_file << elements[line_no] << std::endl;
}

output_file.close();
}


#endif // !ELEMENTS

Linux commands:
$ g++ *.cpp -o Source
or
$ g++ Source.cpp -o Source
$ ./Source test.txt


#cplusplus #c #tutorial

Linking Multiple File Projects C Tutorial
Compiling and Linking Multiple Files in C++