PRIMERA PREGUNTA:Estaba practicando en Dev-C++ 4.9.9.2 y se me ocurrió implementar un mismo programa en diferentes lenguajes: C y C++. El programa consiste en calcular el factorial de un conjunto de números desde 0 hasta n, donde n lo da el usuario.
El código fuente en C++ para el programa lo guardé en un archivo con extensión .cpp y es el siguiente:
#include <iostream>
using namespace std;
int main(){
int n;
long F;
do{
cin>>n;
if(n<0) cout<<"El numero es incorrecto!"<<endl;
}while(n<0);
for(int j=0; j<=n; ++j){
F=1;
if(j>1){
for(int i=1;i<=j;++i){
F*=i;
}
}
cout<<j<<"! = "<<F<<endl;
}
return 0;
}
El código fuente en C para el mismo programa lo guardé en un archivo con extensión .c y es el siguiente:
#include <stdio.h>
int main(){
int n, i, j;
long F;
do{
scanf("%i", &n);
fflush(stdin);
if(n<0) printf("El numero es incorrecto!\n");
}while(n<0);
for(j=0; j<=n; ++j){
F=1;
if(j>1){
for(i=1; i<=j; ++i){
F=F*i;
}
}
printf("%d! = %ld\n", j, F);
}
return 0;
}
Lo compilé y si me funcionó. Luego lo que hice fue revisar cuánto pesaba cada uno de los archivos ejecutables generados luego de compilarlos y me dio los siguientes resultados:
El primer ejecutable (del programa hecho en C++) pesaba 464 KB y el segundo ejecutable (del programa hecho en C) pesaba 15.4 KB.
Me pregunto entonces: ¿Tanto es la diferencia de 448.6 KB? ¿Alguien sabrá como explicar esto?SEGUNDA PREGUNTA:Quise averiguar el tamaño de los tipos de datos con los que trabajaba en mi compilador. Así que primero en un archivo .cpp escribí el código siguiente:
#include <iostream>
using namespace std;
int main(){
cout<<sizeof(short)<<endl;
cout<<sizeof(int)<<endl;
cout<<sizeof(long)<<endl;
cout<<sizeof(long long)<<endl;
return 0;
}
Y me arrojó de salida lo siguiente:
2
4
4
8
Si es que el tipo int y el tipo long ocupan el mismo tamaño en la memoria, entonces ¿de qué me sirve el long si me basta el int?
Algo similar hice pero en un archivo .c
#include <stdio.h>
int main(){
printf("%hd\n", sizeof(short));
printf("%d\n", sizeof(int));
printf("%ld\n", sizeof(long));
printf("%ld\n", sizeof(long long));
return 0;
}
Y me arrojó de salida lo siguiente:
2
4
4
8
Entonces mi pregunta aquí es la misma: ¿de qué me sirve el long si me basta el int?
Y otra: ¿No sabía que el tipo long long existía en C?
Espero sus comentarios, sus respuestas y sus críticas.