Thanks for the help, but i was more searching this soultion
main.c
Code:
#include "print.h"
int main()
{
int8_t numeros[] = {23,45,78,23};
PrintArray(numeros,NumberOfArrayElements(numeros),INT8);
return EXIT_SUCCESS;
}
print.c
Code:
#include "print.h"
void _PrintArray(void *array, int64_t sizeArray, uint8_t typeData, char const *fileName, char const *functionName, const int64_t lineNumber)
{
if(sizeArray <= 0)
{
ErrorRaise(errorSizePrint, fileName, functionName, lineNumber);
}
if(CHAR == typeData)
{
for(uint64_t i = 0; i < (uint64_t)sizeArray; i++)
{
printf("%c", *((char*)array + i));
}
printf("\n");
}
else if(UNSIGNED_CHAR == typeData)
{
for(uint64_t i = 0; i < (uint64_t)sizeArray; i++)
{
printf("%c", *((unsigned char*)array + i));
}
printf("\n");
}
else if(INT8 == typeData)
{
for(uint64_t i = 0; i < (uint64_t)sizeArray; i++)
{
printf("%d ", *((int8_t*)array +i) );
}
printf("\n");
}
else if(UNSIGNED_INT8 == typeData)
{
uint8_t* auxiliarPointer = (uint8_t*)array;
for(uint64_t i = 0; i < (uint64_t)sizeArray; i++)
{
printf("%u ", auxiliarPointer[i]);
}
printf("\n");
}
else if(INT16 == typeData)
{
for(uint64_t i = 0; i < (uint64_t)sizeArray; i++)
{
printf("%d ", *((int16_t*)array + i));
}
printf("\n");
}
else if(UNSIGNED_INT16 == typeData)
{
for(uint64_t i = 0; i < (uint64_t)sizeArray; i++)
{
printf("%u ", *((uint16_t*)array + i));
}
printf("\n");
}
else if(INT32 == typeData)
{
for(uint64_t i = 0; i < (uint64_t)sizeArray; i++)
{
printf("%d ", *((int32_t*)array + i));
}
printf("\n");
}
else if(UNSIGNED_INT32 == typeData)
{
for(uint64_t i = 0; i < (uint64_t)sizeArray; i++)
{
printf("%u ", *((uint32_t*)array + i));
}
printf("\n");
}
else if(INT64 == typeData)
{
for(uint64_t i = 0; i < (uint64_t)sizeArray; i++)
{
#ifdef __unix__
printf("%ld ", *((int64_t*)array + i));
#else //windows
printf("%I64d ", *((int64_t*)array + i));
#endif
}
printf("\n");
}
else if(UNSIGNED_INT64 == typeData)
{
for(uint64_t i = 0; i < (uint64_t)sizeArray; i++)
{
#ifdef __unix__
printf("%ld ", *((uint64_t*)array + i));
#else //Windows
printf("%I64d ", *((uint64_t*)array + i));
#endif
}
printf("\n");
}
else if(FLOAT == typeData)
{
for(uint64_t i = 0; i < (uint64_t)sizeArray; i++)
{
printf("%f ", *((float*)array + i));
}
printf("\n");
}
else if(DOUBLE == typeData)
{
for(uint64_t i = 0; i < (uint64_t)sizeArray; i++)
{
printf("%f ", *((double*)array + i));
}
printf("\n");
}
else
{
ErrorRaise(errorSizePrint, fileName, functionName, lineNumber);
}
}
print.h
Code:
#ifndef PRINT_H_INCLUDED
#define PRINT_H_INCLUDED
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include "header.h"
#include "error.h"
#define PrintArray(array, sizeArray, typeData) _PrintArray(array, sizeArray, typeData, __FILE__, __FUNCTION__, __LINE__)
void _PrintArray(void *array, int64_t sizeArray, uint8_t typeData, char const *fileName, char const *functionName, const int64_t lineNumber);
#endif // PRINT_H_INCLUDED
So this define does all the work
Code:
#define PrintArray(array, sizeArray, typeData) _PrintArray(array, sizeArray, typeData, __FILE__, __FUNCTION__, __LINE__)
In main.c i can still call the PrintArray() without given the file, function and line parameters, so when an event of handling error occuors due to the parameters in main.c the error function will return the file, func and line of the main.c where the errors has happened. The programmer who use this function will have a littel handling error rutine inside without notice it.
Example
changed INT8 definition to a number out of range like 50 for example
main.c
Code:
#include "print.h"
#include "array.h"
#include "allocator.h"
#include "sort.h"
#include "aritmethic.h"
int main()
{
int8_t numeros[] = {23,45,78,23};
PrintArray(numeros,NumberOfArrayElements(numeros),50);
return EXIT_SUCCESS;
}
output