#ifdef x86_64
typedef unsigned long u64
typedef unsigned int u32
#endif
#ifdef x86_32 // ??? уточни константы имя
typedef unsigned long long u64
typedef unsigned long u32
#endif
Кроссплатформенный код
#ifdef linux
int main(int argc, char* argv[]) {
...линукс код...}
#else
int APIENTRY WinMain(...){
...виндовый код...}
#endif
Не могу понять следующего: как всё таки компилятор узнает, что за система? Насколько я понимаю, компилятор, встретив #ifdef должен определить тип системы. Он сможет узнать о системе в зависимости от того, определено ли linux (см. выше). Где оно может быть определено?
В Makefile'e ?
В некоторых случаях тип ос можно узнать из переменной окружения.
Обычно компилятор генерирует код под систему, в которой он сам же и работает (поэтму ему и не нужно вообщем-то ее определять). Для кросс-компиляторов используется ключик (типа, -target), чтобы он знал, под что ему генерить код.
#ifdef x86_64
typedef unsigned long u64
#else
typedef unsigned long u32
Будет ли это корректно? Можно ли с уверенностью утверждать, что код на платформах 32 и 64 будет выполняться так, как мне нужно?
Цитата: igor_nf
Будет ли это корректно? Можно ли с уверенностью утверждать, что код на платформах 32 и 64 будет выполняться так, как мне нужно?
Смотря что за код...
Кстати, название темы не совсем корректно: ты путаешь понятия кроссплатформенность и мультиплатформенность.
А вот наоборот работать не будет вообще :(
А кстати, раз уж зашёл разговор, тогда в двух словах обьясните понятие кроссплатформенности, если мы говорим о мультиплатформенности.
Вот кое-что. Может поможет)