#include <stdio.h>
#define BUFFER_SIZE 1024
#define NUMBERS 1, 2, 3
#define VAR mivariable
void XX(int x){
x = 1;
}
void YY(int *x){
*x = 1;
}
int main(void){
char * foo = (char*)malloc(BUFFER_SIZE);
int x[] = { NUMBERS };
int mivariable = 1;
BUFFER_SIZE = 1;
XX(BUFFER_SIZE);
YY(&VAR);
}
Analice el siguiente programa en C++ donde ? (x) : 0 retorna el valor de x si se cumple la condición si no se cumple devuelve el valor 0.
#include <iostream>
using namespace std;
#define SUMAX(x) (((x)>5 && (x)<10) ? (x) : 0)
int main(void){
for(int i = 4; i < 11; i++) {
int a = i;
cout << "a = " << a << '\n';
cout << "SUMAX(++a)=" << SUMAX(++a) << '\n';
cout << "\t a = " << a << '\n';
}
}
a) Indique cuáles son las salidas producidas por el programa.
b) Si se escribiese SUMAX como una función que realiza pasaje de parámetros por referencia de una variable que contenga el valor de ++a. ¿Se producen los mismos resultados? Justifique su respuesta tanto si es afirmativa o negativa
#include <iostream>
using namespace std;
int foo=1;
#define twice(x) (2*(x))
#define call_with_1(x) x(1)
#define min(X, Y) ((X) < (Y) ? (X) : (Y))
#define min2(X, Y) \
({ typeof (X) x_ = (X); \
typeof (Y) y_ = (Y); \
(x_ < y_) ? x_ : y_; })
#define foo (4 + foo)
int XX(int z){
return z;
}
int main(void){
int next, x, y, z;
call_with_1 (twice);
/**
* call_with_1 (twice)
==> twice(1)
==> (2*(1))
*/
next = min (x + y, XX (z));
next = min2 (x + y, XX (z));
z = foo;
}