Объясните, пожалуйста, сакральный смысл #define
наверное, чтоб можно было потом #ifdef использовать
Может быть чтобы если кто случайно задефайнит что-нибудь из списка, он получил ошибку компиляции?
#ifndef _FTW_H
#define _FTW_H 1
вариант более правдоподобен, однако отдаёт какой-то параноидальностью
почему бы тогда так не защитить всю библиотеку, начиная с printf, и т.п.
например, есть очевидный косяк - если в программе есть функция "abort" или "exit", то полученный exe-шник (a.out) не работоспособен
для этого естьнет, не для этого
есть какие-то причины сделать флаги енумом, а не дефайном сразу, типа как тут?
/* The possibilities for the third argument to `fseek'.
These values should not be changed. */
#define SEEK_SET 0 /* Seek from beginning of file. */
#define SEEK_CUR 1 /* Seek from current position. */
#define SEEK_END 2 /* Seek from end of file. */
А в истории коммитов нет ничего? Обычно такие вещи объясняют, если конечно не пофигисты писали.
может быть, чтобы пространство имён не сильно загрязнять?
ну то есть локальную переменную можно назвать таким же именем, и всё ок
то, что я ща в гугле нашёл на эту тему, в основном про это
PS. enum-ы круче define-ов например потому что можно вот так клёво оверлодить
[xoft c++]$ cat enum.cpp
#include <iostream>
using namespace std;
enum X {
X1 = 10,
X2 = 20,
};
ostream & operator << (ostream & os, const X & x) {
if (x == X1) {
os << "X1";
} else if (x == X2) {
os << "X2";
} else {
os << "X" << int(x);
}
return os;
}
int main {
cout << X1 << " " << X(5) << endl;
}
[xoft c++]$ ./enum
X1 X5
Unix has you
Я, кстати, согласен с Гадфазером наверное. Обратите внимание — там часть значений сама обёрнута в ifdef. Ну и наверное правильнее проверять, допустимо ли некое значение непосредственно, чем через определяющее его наличие условие или ещё как-то.
> #define SEEK_SET 0 /* Seek from beginning of file. */
Есть причины не делать этого.
---
"Narrowness of experience leads to narrowness of imagination."
> вот тут:
> enum
> {
> FTW_F, /* Regular file. */
> #define FTW_F FTW_F
Есть такое слово --- "совместимость."
---
"Рот фронт, группенфюрер..."
Есть такое слово --- "совместимость."зачем ты это пишешь? Да, есть, здесь это можно понять многими способами, скажи, что ты имел в виду.
его не так уж и сложно понимать, нужно всего-лишь использовать мозг
вот тут:был говнокод.
наверное, чтоб можно было потом #ifdef использоватьКстати да, чтобы использовать #ifdef достаточно написать #define FTW_F, но там именно #define FTW_F FTW_F, что как бы говорит нам...
как ни странно, если написать #define FTW, то потом FTW нельзя будет использовать
#include <stdio.h>
#define WTF
int WTF main(WTF WTF WTF)
{
WTF printf WTF(WTF "Hello!\n" WTF);
return WTF 0 WTF;
}
WTF WTF WTF
как нельзя?осмысленно нельзя
осмысленно нельзяэто еще почему?
#include <stdio.h>
#define FTW jgdfvs
int main
{
int FTW = 8;
printf("%d\n", FTW);
}
если написать #define FTWУ тебя же в третьей строке написано другое.
даже если и так, #undef пока ещё никто не отменял.
Причем здесь это? Ты можешь привести пример осмысленного использования макроса с пустым значением, кроме как в инструкциях препроцессора (вариант, когда это значение условно пустое, то есть пустое при выполнении какого-то условия, не считается)?
#define _IN_
#define _OUT_
#define _LENGTHOF_(x)
void F(_IN_ char*str, _IN_ _LENGTHOF_(str) unsigned length, _OUT_ int* something);
Оставить комментарий
yolki
вот тут: