Articles of macros

什么是使用Linuxmacrosaccess_ok()

我一直在做一些研究,我对这个macros有点困惑。 希望有人能给我一些指导。 我有一些ioctl代码(我已经inheritance,没有写),如果在从用户空间复制数据之前检查access_ok()是否做了第一件事: #define __lddk_copy_from_user(a,b,c) copy_from_user(a,b,c) #define __lddk_copy_to_user(a,b,c) copy_to_user(a,b,c) long can_ioctl(struct file *file, unsigned int cmd, unsigned long arg) { switch(cmd) { case COMMAND: if(! access_ok(VERIFY_READ, (void *)arg, sizeof(Message_par_t))) return(retval); if(! access_ok(VERIFY_WRITE, (void *)arg, sizeof(Message_par_t))) return(retval); argp = &Command; __lddk_copy_from_user( (void *) argp,(Command_par_t *) arg, sizeof(Command_par_t)); 所以代码工作得很好,但我不确定是否需要。 第一个问题来自access_ok返回的描述: 如果该区域可能可访问,该函数返回非零值(尽pipe访问可能仍然导致-EFAULT)。 这个函数简单地检查地址是否可能在用户空间中,而不是在内核中。 所以这意味着它确实没有什么更多的,然后确保我们检查的指针可能初始化在用户空间? 既然我们知道除了用户空间调用之外,我们不能进入这个函数,除非我们打开一个有效的文件描述符到这个设备,否则这是不可能发生的,这真的是需要的吗? 确实没有得到一个NULL指针是否真的更安全? 第二个问题来自这个描述: types参数可以指定为VERIFY_READ或VERIFY_WRITE。 […]

在gcc中有作为内置macros的非保留标识符的原因是什么?

今天我偶然发现了一个相当有趣的编译器错误: int main() { int const unix = 0; // error-line return unix; } 给gcc 4.3.2(是的,古老的)以下消息: error: expected unqualified-id before numeric constant 这绝对是相当混乱。 幸运的是,铿锵声(3.0)是一个更有帮助(像往常一样): error: expected unqualified-id int const unix = 0 ^ <built-in>:127:14: note: expanded from: #define unix 1 ^ 我当然没有想到unix ,它既不是大写字母,也不是从下划线开始,成为一个macros,特别是一个内置macros。 我检查了gcc中的预定义macros,并且有2个(在我的平台上)使用“非保留”符号: $ g++ -E -dM – < /dev/null | grep -v _ […]

Linux内核代码中的EXPORT_SYMBOL_GPL是什么?

Linux内核代码中的EXPORT_SYMBOL_GPL是什么? 下面是一段代码,其中包含EXPORT_SYMBOL_GPL 62 struct resource *platform_get_resource(struct platform_device *dev, 63 unsigned int type, unsigned int num) 64 { 65 int i; 66 67 for (i = 0; i < dev->num_resources; i++) { 68 struct resource *r = &dev->resource[i]; 69 70 if (type == resource_type(r) && num– == 0) 71 return r; 72 } 73 return NULL; […]

有没有一个macros定义来检查Linux内核版本?

我想知道是否有一个gccmacros会告诉我的Linux内核版本,所以我可以适当地设置variablestypes。 如果没有,我将如何去定义我自己的这个macros?

如何驯服Windows头文件(有用的定义)?

在这个问题的答案之一, NOMINMAX谈到有用的定义NOMINMAX ,可以防止不必要的定义最小/最大macros。 是否还有其他有用的定义可以帮助控制windows.h (或其他Windows头文件,例如Microsoft C运行时头文件或STL实现)的行为?

如何避免与Windows头文件中定义的macros名称冲突?

我有一些C ++代码,包括一个名为CreateDirectory().的方法CreateDirectory(). 以前的代码只使用STL和Boost,但是我最近不得不包含<windows.h>所以我可以查找CSIDL_LOCAL_APPDATA 。 现在,这个代码: filesystem.CreateDirectory(p->Pathname()); // Actually create it… 不再编译: error C2039: 'CreateDirectoryA' : is not a member of … 在winbase.h对应这个macros: #ifdef UNICODE #define CreateDirectory CreateDirectoryW #else #define CreateDirectory CreateDirectoryA #endif // !UNICODE 预处理器正在重新定义我的方法调用。 有没有可能的方法来避免这种命名冲突? 或者我必须重命名我的CreateDirectory()方法?

自动截取程序窗口的截图

我正在寻找一种结合了macros观录制和截图function的软件。 我们有一个软件手册与一些截图。 当新版本的软件发布时,我们需要更新大部分屏幕截图,我们必须手动完成。 现在我们开始翻译手册到几种语言,截图的数量增加了十倍。 我们想自动化这个过程。 将有一个录制的macros或点击我们的软件内的button,并采取程序窗口的屏幕截图。 更好的是,虽然不重要,但我们可以单独指定每个屏幕截图的名称。 这样的事情存在吗?

Windows有一个__declspec相当于Unix GCC的__attribute __((弱))?

我想导入一些C代码,但是重写它的main()函数。 我可以在Unix下用__attribute__((weak))预处理C代码的主要声明,但是这不会在Windows中编译,因为Strawberry Perl的GCC和MinGW的GCC都不能识别__attribute__((weak)) 。 在线阅读文档, __declspec似乎function相似。 是否有一个相当于Unix GCC的__attribute__((weak))macros的__declspec ? 这是我发布的早期问题的更具体的版本。

我想跟踪使用macros多参数始终为空的日志。 问题的c + +窗口

我正在使用以下方法来closures一个函数的时间: #define TIME_COST(message, …)\ char szMessageBuffer[2048] = {0};\ va_list ArgList;\ va_start(ArgList, message);\ vsprintf_s(szMessageBuffer, 2048, message, ArgList);\ va_end(ArgList); \ string strMessage(szMessageBuffer);\ CQLogTimer t(strMessage); // CQLogTimer是一个自我析构函数,它将自己的生命周期和打印szMessageBuffer。 但是,当我使用这个macros: void fun { TIME_COST("hello->%s", filePath); XXXXXX } 生成的消息总是hello – >(null) 任何人都可以帮忙吗? 非常感谢!