Commit 2484af74 by Karsa Zoltán István

Merge branch 'cmake-project' into 'master'

Cmake project

See merge request !1
parents 76159847 47a81d43
# Lab02 project
#
# Originally created: 2023-02-27.
#
# CMakeLists.txt --
# Elsődleges CMake file a lab_02 projekt fordításához.
# Fontos!
# Ez a fájl egy összesített script a két alprojekt kezeléséhez.
# Direkt egyesével is használhatóak, amennyiben a megfelelő
# almappát nyitjuk meg projektként.
# Ha ezt használjuk, akkor figyeljünk, mit próbálunk fordítani/futtatni!
# Például CLion-ban a futtatás gomb mellett megfelelő program van
# kiválasztva; VS-ben pedig megfelelő projektet probálunk elindítani.
# Használat:
# - parancssor: cmake -B _build -S . && cmake --build _build
# - CLion/Visual Studio: Megnyitni a mappát projektként
# - HSZK Visual Studio: HSZK-VS17 mappában előre legenerált projekt elérhető
cmake_minimum_required(VERSION 3.18) # Debian Bullseye
project(cpp_lab_02
HOMEPAGE_URL "https://git.ik.bme.hu/Prog2/labor_peldak/lab_02"
VERSION 1.0.0
LANGUAGES C CXX)
add_subdirectory(string1)
add_subdirectory(string2_cpp)
# A szóban megoldandó feladatok ellenőrzésére, ezeket
# nem érdemes fordítani, mert nem helyesek, ha valaki
# szeretné, az alábbi sorok kikommenzezésével lehet őket
# ismertetni CMake-el. Így meg lehet nézni, konkrétan
# mit ír ki a használt fordító a hibákra, esetleg
# önellenőrzésre
#add_executable(szoveges_feldat_const const_h.cpp)
#add_executable(szoveges_feldat_ref ref_h.cpp)
# Lab02 project
# string1 target
#
# Originally created: 2023-03-06.
#
# CMakeLists.txt --
# CMake file a lab_02 projekt string1 céljának fordításához.
# Használat:
# - parancssor: cmake -B _build -S . && cmake --build _build
# - CLion/Visual Studio: Megnyitni a mappát projektként
cmake_minimum_required(VERSION 3.18) # Debian Bullseye
project(cpp_lab_02_str1
HOMEPAGE_URL "https://git.ik.bme.hu/Prog2/labor_peldak/lab_02"
VERSION 1.0.0
LANGUAGES C)
add_library(memtrace_c STATIC
memtrace.c memtrace.h)
target_compile_features(memtrace_c PRIVATE c_std_99)
target_compile_definitions(memtrace_c PUBLIC MEMTRACE
_CRT_SECURE_NO_WARNINGS)
add_executable(lab_02_string1
string1.c
string1.h
string1_main.c
gtest_lite.h)
target_compile_features(lab_02_string1 PRIVATE c_std_99)
set_target_properties(lab_02_string1 PROPERTIES
CXX_EXTENSIONS OFF)
target_link_libraries(lab_02_string1 PRIVATE memtrace_c)
# A C fordításra nincs teljes generate_warnings, csak az egyszerű konstans
# kapcsolókat használjuk.
target_compile_options(lab_02_string1 PRIVATE
$<$<CXX_COMPILER_ID:GNU,Clang,AppleClang>:-Wall -Wextra -Werror>
$<$<CXX_COMPILER_ID:Clang>:-Wno-reserved-macro-identifier
-Wno-unused-macros -Wno-format
-Wno-strict-prototypes
-Wno-shorten-64-to-32
-Wno-unsafe-buffer-usage
-Wno-declaration-after-statement>
$<$<CXX_COMPILER_ID:MSVC>:/W4 /WX /wd4267>)
...@@ -3,7 +3,7 @@ Memoriaszivargas-detektor ...@@ -3,7 +3,7 @@ Memoriaszivargas-detektor
Keszitette: Peregi Tamas, BME IIT, 2011 Keszitette: Peregi Tamas, BME IIT, 2011
petamas@iit.bme.hu petamas@iit.bme.hu
Kanari: Szeberenyi Imre, 2013., Kanari: Szeberenyi Imre, 2013.,
VS 2012: Szebernyi Imre, 2015., VS 2012: Szeberényi Imre, 2015.,
mem_dump: 2016. mem_dump: 2016.
inclue-ok: 2017., 2018. inclue-ok: 2017., 2018.
*********************************/ *********************************/
...@@ -13,7 +13,7 @@ inclue-ok: 2017., 2018. ...@@ -13,7 +13,7 @@ inclue-ok: 2017., 2018.
#if defined(MEMTRACE) #if defined(MEMTRACE)
/*ha definilva van, akkor a hibakat ebbe a fajlba rja, egybkent stderr-re*/ /*ha definiálva van, akkor a hibakat ebbe a fajlba írja, egyébkent stderr-re*/
/*#define MEMTRACE_ERRFILE MEMTRACE.ERR*/ /*#define MEMTRACE_ERRFILE MEMTRACE.ERR*/
/*ha definialva van, akkor futas kozben lancolt listat epit. Javasolt a hasznalata*/ /*ha definialva van, akkor futas kozben lancolt listat epit. Javasolt a hasznalata*/
...@@ -71,25 +71,25 @@ inclue-ok: 2017., 2018. ...@@ -71,25 +71,25 @@ inclue-ok: 2017., 2018.
#define TRACEC(func) func #define TRACEC(func) func
#endif #endif
// THROW deklarci vltozatai // THROW deklaráció változatai
#if defined(_MSC_VER) #if defined(_MSC_VER)
// VS rosszul kezeli az __cplusplus makrot // VS rosszul kezeli az __cplusplus makrot
#if _MSC_VER < 1900 #if _MSC_VER < 1900
// * nem biztos, hogy j gy * // * nem biztos, hogy jó így *
#define THROW_BADALLOC #define THROW_BADALLOC
#define THROW_NOTHING #define THROW_NOTHING
#else #else
// C++11 vagy jabb // C++11 vagy újabb
#define THROW_BADALLOC noexcept(false) #define THROW_BADALLOC noexcept(false)
#define THROW_NOTHING noexcept #define THROW_NOTHING noexcept
#endif #endif
#else #else
#if __cplusplus < 201103L #if __cplusplus < 201103L
// C++2003 vagy rgebbi // C++2003 vagy régebbi
#define THROW_BADALLOC throw (std::bad_alloc) #define THROW_BADALLOC throw (std::bad_alloc)
#define THROW_NOTHING throw () #define THROW_NOTHING throw ()
#else #else
// C++11 vagy jabb // C++11 vagy újabb
#define THROW_BADALLOC noexcept(false) #define THROW_BADALLOC noexcept(false)
#define THROW_NOTHING noexcept #define THROW_NOTHING noexcept
#endif #endif
...@@ -144,9 +144,9 @@ END_NAMESPACE ...@@ -144,9 +144,9 @@ END_NAMESPACE
#include <stdlib.h> #include <stdlib.h>
#ifdef __cplusplus #ifdef __cplusplus
#include <iostream> #include <iostream>
/* ide gyjtjk a nemtrace-vel sszeakad headereket, hogy elbb legyenek */ /* ide gyűjtjük a nemtrace-vel összeakadó headereket, hogy előbb legyenek */
#include <fstream> // VS 2013 headerjben van deleted definici #include <fstream> // VS 2013 headerj�ben van deleted definici�
#include <sstream> #include <sstream>
#include <vector> #include <vector>
#include <algorithm> #include <algorithm>
...@@ -197,7 +197,7 @@ void * operator new[](size_t size) THROW_BADALLOC; ...@@ -197,7 +197,7 @@ void * operator new[](size_t size) THROW_BADALLOC;
void operator delete(void * p) THROW_NOTHING; void operator delete(void * p) THROW_NOTHING;
void operator delete[](void * p) THROW_NOTHING; void operator delete[](void * p) THROW_NOTHING;
/* Visual C++ 2012 miatt kell, mert hklis, hogy nincs megfelel delete, br senki sem hasznlja */ /* Visual C++ 2012 miatt kell, mert háklis, hogy nincs megfelelő delete, bár senki sem használja */
void operator delete(void *p, int, const char *) THROW_NOTHING; void operator delete(void *p, int, const char *) THROW_NOTHING;
void operator delete[](void *p, int, const char *) THROW_NOTHING; void operator delete[](void *p, int, const char *) THROW_NOTHING;
......
# Lab02 project
# string2 target
#
# Originally created: 2023-02-27.
#
# CMakeLists.txt --
# CMake file a lab_02 projekt string2 céljának fordításához.
# Használat:
# - parancssor: cmake -B _build -S . && cmake --build _build
# - CLion/Visual Studio: Megnyitni a mappát projektként
# - Code::Blocks:
# 1) cmake -G "CodeBlocks - <1>" -B _build -S .
# - Windows: <1> = MinGW Makefiles
# - Unix: <2> = Unix Makefiles
# 2) A _build/*.cbp fájlt megnyitni
cmake_minimum_required(VERSION 3.18) # Debian Bullseye
include(CheckCXXCompilerFlag)
project(cpp_lab_02_str2
HOMEPAGE_URL "https://git.ik.bme.hu/Prog2/labor_peldak/lab_02"
VERSION 1.0.0
LANGUAGES CXX)
add_library(memtrace_cxx STATIC
memtrace.cpp memtrace.h)
target_compile_features(memtrace_cxx PRIVATE cxx_std_98)
target_compile_definitions(memtrace_cxx PUBLIC MEMTRACE)
add_executable(lab_02_string2
gtest_lite.h
string2.cpp
string2.h
string2_main.cpp)
target_compile_features(lab_02_string2 PRIVATE cxx_std_98)
set_target_properties(lab_02_string2 PROPERTIES
CXX_EXTENSIONS OFF)
target_link_libraries(lab_02_string2 PRIVATE memtrace_cxx)
target_compile_options(lab_02_string2 PRIVATE
$<$<CXX_COMPILER_ID:GNU,Clang,AppleClang>:-Werror>
$<$<CXX_COMPILER_ID:MSVC>:/WX>)
## CheckWarningFlag(OptionName CacheName) --
# Ellenőrzi, hogy az használt fordító érti-e a kapott parancssori kapcsolót.
function(check_warning_flag OptionName CacheName)
if (OptionName MATCHES [[^/]])
set(WarningPrefix "")
else ()
set(WarningPrefix "-W")
endif ()
check_cxx_compiler_flag("${WarningPrefix}${OptionName}" "HasWarning_${CacheName}")
set("HAS_WARNING_${CacheName}" ${HasWarning_${CacheName}} PARENT_SCOPE)
endfunction()
## generate_warnings(&Target) --
# Beállít hibakapcsolókat a kapott target-en.
function(generate_warnings _Target)
set(gw_known_warnings
# GCC/Clang
extra pedantic error=vla error=non-virtual-dtor
parentheses logical-op reorder no-c++98-compat
no-reserved-macro-identifier no-unused-macros no-float-equal
no-zero-as-null-pointer-constant no-global-constructors
no-exit-time-destructors no-unsafe-buffer-usage
no-reserved-identifier # _Is_...
no-old-style-cast # gtest_lite
# MSVC
# conditional expression is constant (nem szereti az ELKESZULT) markot
/wd4127
# 'function': member function does not override any base class virtual member function
/we4263
# 'class': class has virtual functions, but destructor is not virtual
/we4265
# 'identifier': illegal qualified name in member declaration
/we4596
# 'symbol': exception specification does not match previous declaration
/we4986
4
/permissive-
/diagnostics:caret)
# MSVC /Wall == clang -Weverything, arra nincs szükségünk
set(gw_found_warnings $<$<CXX_COMPILER_ID:GNU,Clang,AppleClang>:-Wall>)
foreach (warn IN LISTS gw_known_warnings)
string(MAKE_C_IDENTIFIER "${warn}" CacheName)
check_warning_flag("${warn}" ${CacheName})
if (HAS_WARNING_${CacheName})
if (warn MATCHES [[^/]])
set(WarningPrefix "")
else ()
set(WarningPrefix "-W")
endif ()
list(APPEND gw_found_warnings "${WarningPrefix}${warn}")
endif ()
endforeach ()
target_compile_options("${_Target}" PUBLIC ${gw_found_warnings})
endfunction()
generate_warnings(lab_02_string2)
...@@ -225,6 +225,7 @@ public: ...@@ -225,6 +225,7 @@ public:
} }
/// Teszt vége /// Teszt vége
std::ostream& end(bool memchk = false) { std::ostream& end(bool memchk = false) {
(void)memchk;
#ifdef MEMTRACE #ifdef MEMTRACE
if (memchk && ablocks != memtrace::allocated_blocks()) { if (memchk && ablocks != memtrace::allocated_blocks()) {
status = false; status = false;
......
...@@ -5,8 +5,9 @@ Keszitette: Peregi Tamas, BME IIT, 2011 ...@@ -5,8 +5,9 @@ Keszitette: Peregi Tamas, BME IIT, 2011
Kanari: Szeberenyi Imre, 2013. Kanari: Szeberenyi Imre, 2013.
VS 2012: Szeberényi Imre, 2015., VS 2012: Szeberényi Imre, 2015.,
mem_dump: 2016. mem_dump: 2016.
meset felszabaditaskor: 2018. memset felszabaditaskor: 2018.
typo: 2019. typo: 2019.
poi_check: 2021.
*********************************/ *********************************/
/*definialni kell, ha nem paracssorbol allitjuk be (-DMEMTRACE) */ /*definialni kell, ha nem paracssorbol allitjuk be (-DMEMTRACE) */
...@@ -178,7 +179,6 @@ START_NAMESPACE ...@@ -178,7 +179,6 @@ START_NAMESPACE
dying = TRUE; dying = TRUE;
exit(120); exit(120);
} }
static void initialize(); static void initialize();
END_NAMESPACE END_NAMESPACE
...@@ -188,6 +188,7 @@ END_NAMESPACE ...@@ -188,6 +188,7 @@ END_NAMESPACE
#ifdef MEMTRACE_TO_MEMORY #ifdef MEMTRACE_TO_MEMORY
START_NAMESPACE START_NAMESPACE
typedef struct _registry_item { typedef struct _registry_item {
void * p; /* mem pointer*/ void * p; /* mem pointer*/
size_t size; /* size*/ size_t size; /* size*/
...@@ -197,6 +198,12 @@ START_NAMESPACE ...@@ -197,6 +198,12 @@ START_NAMESPACE
static registry_item registry; /*sentinel*/ static registry_item registry; /*sentinel*/
static registry_item *find_registry_item(void * p) {
registry_item *n = &registry;
for(; n->next && n->next->p != p ; n=n->next);
return n;
}
static void print_registry_item(registry_item * p) { static void print_registry_item(registry_item * p) {
if (p) { if (p) {
print_registry_item(p->next); print_registry_item(p->next);
...@@ -225,6 +232,13 @@ START_NAMESPACE ...@@ -225,6 +232,13 @@ START_NAMESPACE
} }
return 0; return 0;
} }
/* Ellenorzi, hogy a pointer regisztralt-e. Ha nem, akkor 0-val tér vissza */
int poi_check(void *pu) {
if (pu == NULL) return 1;
initialize();
return find_registry_item(P(pu))->next != NULL;
}
END_NAMESPACE END_NAMESPACE
#endif/*MEMTRACE_TO_MEMORY*/ #endif/*MEMTRACE_TO_MEMORY*/
...@@ -271,14 +285,6 @@ START_NAMESPACE ...@@ -271,14 +285,6 @@ START_NAMESPACE
return TRUE; return TRUE;
} }
#ifdef MEMTRACE_TO_MEMORY
static registry_item *find_registry_item(void * p) {
registry_item *n = &registry;
for(; n->next && n->next->p != p ; n=n->next);
return n;
}
#endif
static void unregister_memory(void * p, call_t call) { static void unregister_memory(void * p, call_t call) {
initialize(); initialize();
#ifdef MEMTRACE_TO_FILE #ifdef MEMTRACE_TO_FILE
...@@ -487,7 +493,15 @@ void operator delete(void * p) THROW_NOTHING { ...@@ -487,7 +493,15 @@ void operator delete(void * p) THROW_NOTHING {
void operator delete[](void * p) THROW_NOTHING { void operator delete[](void * p) THROW_NOTHING {
memtrace::traced_delete(p,FDELETEARR); memtrace::traced_delete(p,FDELETEARR);
} }
#if __cplusplus >= 201402L
void operator delete(void * p, size_t) THROW_NOTHING {
memtrace::traced_delete(p,FDELETE);
}
void operator delete[](void * p, size_t) THROW_NOTHING {
memtrace::traced_delete(p,FDELETEARR);
}
#endif
/* Visual C++ 2012 miatt kell, mert háklis, hogy nincs megfelelő delete, bár senki sem használja */ /* Visual C++ 2012 miatt kell, mert háklis, hogy nincs megfelelő delete, bár senki sem használja */
void operator delete(void * p, int, const char *) THROW_NOTHING { void operator delete(void * p, int, const char *) THROW_NOTHING {
......
...@@ -5,7 +5,8 @@ Keszitette: Peregi Tamas, BME IIT, 2011 ...@@ -5,7 +5,8 @@ Keszitette: Peregi Tamas, BME IIT, 2011
Kanari: Szeberenyi Imre, 2013., Kanari: Szeberenyi Imre, 2013.,
VS 2012: Szeberényi Imre, 2015., VS 2012: Szeberényi Imre, 2015.,
mem_dump: 2016. mem_dump: 2016.
inclue-ok: 2017., 2018. 2019. inclue-ok: 2017., 2018., 2019., 2021., 2022.
clang-mágia:Bodor András, 2025
*********************************/ *********************************/
#ifndef MEMTRACE_H #ifndef MEMTRACE_H
...@@ -102,6 +103,7 @@ END_NAMESPACE ...@@ -102,6 +103,7 @@ END_NAMESPACE
#if defined(MEMTRACE_TO_MEMORY) #if defined(MEMTRACE_TO_MEMORY)
START_NAMESPACE START_NAMESPACE
int mem_check(void); int mem_check(void);
int poi_check(void*);
END_NAMESPACE END_NAMESPACE
#endif #endif
...@@ -153,6 +155,18 @@ END_NAMESPACE ...@@ -153,6 +155,18 @@ END_NAMESPACE
#include <map> #include <map>
#include <algorithm> #include <algorithm>
#include <functional> #include <functional>
#include <memory>
#include <iomanip>
#include <locale>
#include <typeinfo>
#include <ostream>
#include <stdexcept>
#include <ctime>
#include <random>
#if __cplusplus >= 201103L
#include <iterator>
#include <regex>
#endif
#endif #endif
#ifdef MEMTRACE_CPP #ifdef MEMTRACE_CPP
namespace std { namespace std {
...@@ -178,8 +192,7 @@ START_NAMESPACE ...@@ -178,8 +192,7 @@ START_NAMESPACE
#define realloc(old,size) TRACEC(traced_realloc)(old,size,#size,__LINE__,__FILE__) #define realloc(old,size) TRACEC(traced_realloc)(old,size,#size,__LINE__,__FILE__)
void * traced_realloc(void * old, size_t size, const char *size_txt, int line, const char * file); void * traced_realloc(void * old, size_t size, const char *size_txt, int line, const char * file);
void mem_dump(void const *mem, size_t size, FILE* fp); void mem_dump(void const *mem, size_t size, FILE* fp = stdout);
END_NAMESPACE END_NAMESPACE
#endif/*MEMTRACE_C*/ #endif/*MEMTRACE_C*/
...@@ -200,10 +213,26 @@ void * operator new[](size_t size) THROW_BADALLOC; ...@@ -200,10 +213,26 @@ void * operator new[](size_t size) THROW_BADALLOC;
void operator delete(void * p) THROW_NOTHING; void operator delete(void * p) THROW_NOTHING;
void operator delete[](void * p) THROW_NOTHING; void operator delete[](void * p) THROW_NOTHING;
#if __cplusplus >= 201402L
// sized delete miatt: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3536.html
void operator delete(void * p, size_t) THROW_NOTHING;
void operator delete[](void * p, size_t) THROW_NOTHING;
#endif
/* Visual C++ 2012 miatt kell, mert háklis, hogy nincs megfelelő delete, bár senki sem használja */ /* Visual C++ 2012 miatt kell, mert háklis, hogy nincs megfelelő delete, bár senki sem használja */
void operator delete(void *p, int, const char *) THROW_NOTHING; void operator delete(void *p, int, const char *) THROW_NOTHING;
void operator delete[](void *p, int, const char *) THROW_NOTHING; void operator delete[](void *p, int, const char *) THROW_NOTHING;
// clang >= 3.1 esetén vannak warningok, amiket zavar, hogy redefiniálva van a new/delete
#if defined(__clang__) && (__clang_major__ > 3 || \
(__clang_major__ == 3 && __clang_minor__ > 0))
// Csak nagyon drasztikus warning szint mellet jön elő, amikor van rekurzívnak tűnő makró.
// Ilyenek a new és delete alább, hiszen olyan, mintha magukat hívnák, pedig nincs (ilyen)
// rekurzió makró szinten.
# pragma clang diagnostic ignored "-Wdisabled-macro-expansion"
// Bármilyen kulcsszó újradefiniálása esetén pánikol.
# pragma clang diagnostic ignored "-Wkeyword-macro"
#endif
#define new new(__LINE__, __FILE__) #define new new(__LINE__, __FILE__)
#define delete memtrace::set_delete_call(__LINE__, __FILE__),delete #define delete memtrace::set_delete_call(__LINE__, __FILE__),delete
...@@ -215,5 +244,8 @@ void operator delete[](void *p, int, const char *) THROW_NOTHING; ...@@ -215,5 +244,8 @@ void operator delete[](void *p, int, const char *) THROW_NOTHING;
#endif /*MEMTRACE_CPP*/ #endif /*MEMTRACE_CPP*/
#endif /*FROM_MEMTRACE_CPP*/ #endif /*FROM_MEMTRACE_CPP*/
#endif /*MEMCHECK*/ #else
#pragma message ( "MEMTRACE NOT DEFINED" )
#endif /*MEMTRACE*/
#endif /*MEMTRACE_H*/ #endif /*MEMTRACE_H*/
...@@ -74,6 +74,7 @@ unsigned int StringLen(const String &s0) { ...@@ -74,6 +74,7 @@ unsigned int StringLen(const String &s0) {
* @param s0 - referencia a String-re * @param s0 - referencia a String-re
*/ */
void printStringDbg(const String &s0) { void printStringDbg(const String &s0) {
(void)s0;
#ifdef DEBUG #ifdef DEBUG
cout << '[' << s0.len << "], " << s0.pData << '|' << endl; cout << '[' << s0.len << "], " << s0.pData << '|' << endl;
#endif #endif
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment