Artículo perteneciente a la sección de análisis estático de código
Hola a todos,
Hace poco os expliqué como calcular la complejidad ciclomática y si recordais no era más que sumar el número de condicionales de nuestra función.
Pues bien, he hecho un programilla que precisamente hace eso, contar condicionales. Es muy sencillo y necesita muchas mejoras para realmente funcionar como debería pero es un buen inicio. Espero que os guste.
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
int main(int argc, char *argv[])
{
FILE *fp;
long lSize;
char * buffer;
size_t result;
char *p, *p1, *p2;
int cont = 0;
fp = fopen("funcion.txt","rb");
if (fp == NULL) std::cout << "Falta fichero funcion.txt con el codigo a analizar" << std::endl;
//Obtenemos el tamaño del fichero
fseek (fp , 0 , SEEK_END);
lSize = ftell (fp);
rewind (fp);
// reservamos memoria para cargar el fichero
buffer = (char*) malloc (sizeof(char)*lSize);
if (buffer == NULL) std::cout << "Falta memoria para cargar fichero" << std::endl;
// copy the file into the buffer:
result = fread (buffer,1,lSize,fp);
if (result != lSize) std::cout << "Error en la lectura del fichero. Tamaño esperado : " << lSize << " Tamaño real: " << result <<std::endl;
p = (char *) memchr(buffer,'{',lSize);
while(1)
{
p1 = (char *) memchr(p,'i',lSize-(p-buffer) );
if (p1 == NULL) break;
if( ( *(p1-1) == ' ' ) || ( *(p1-1) == '\t' ) || ( *(p1-1) == '\n' ) )
if( *(p1+1) == 'f' )
{
if( ( *(p1+2) == ' ') || ( *(p1+2) == '(') )
{
cont++;
}
}
p = p1+1;
}
p = (char *) memchr(buffer,'{',lSize);
while(1)
{
p1 = (char *) memchr(p,'c',lSize-(p-buffer) );
if (p1 == NULL) break;
if( ( *(p1-1) == ' ' ) || ( *(p1-1) == '\t' ) || ( *(p1-1) == '\n' ) )
if( *(p1+1) == 'a' )
if( *(p1+2) == 's' )
if( *(p1+3) == 'e' )
if( *(p1+4) == ' ' )
cont++;
p = p1+1;
}
std::cout << "Complejidad ciclomatica : " << cont << std::endl;
fclose(fp);
free (buffer);
system("pause");
return 0;
}
Nos vemos
Blog de programación enfocado a estudiantes principiantes de C/C++ en español. Dispone de cursos de todos los niveles y para multitud de usos.
Entradas populares
-
Una pregunta que me hacen en muchas ocasiones es ¿¿qué significa %2?? La respuesta tiene dos acepciones en función de si lo estamos u...
-
<< Ejemplo anterior Artículos Relacionados Ejemplo siguiente >> Hola a todos, ASCII Art es el hecho de hacer di...
-
Articulo perteneciente a : Referencias de programación Hola a todos Os pongo una aportación que a más de uno le irá bien, un resumen de ...
-
Capítulo perteneciente al tutorial de opengl desde cero Hola a todos, Este capítulo tal vez es de lo más complicados de la teoría necesa...
-
<< Ejemplo anterior Artículos Relacionados Ejemplo siguiente >> Hola a todos, El ejercicio de hoy se basa en c...
-
<< Capítulo anterior Artículos Relacionados Capítulo siguiente >> Hola a todos, Este tutorial intenta ser e...
-
<< Capítulo anterior Artículos Relacionados Capítulo siguiente >> Hola a todos... Un compañero vuestro ha...
-
Hola a todos... He aquí la primera entrega "Como crear tu propio motor de videojuegos y no morir en el intento". Antes que nada ...
-
Hola a todos Ya que he recibido un par de mails pidiéndome información sobre SEO, os adjunto unos cuantos trucos que he ido aprendiendo du...
-
<< Capítulo anterior Artículos Relacionados Capítulo siguiente >> El c apitulo de hoy trata sobre las instrucc...
0 comentarios :
Publicar un comentario