GVKun编程网logo

看似毫无意义的#define的function(毫无意义的比较)

6

如果您想了解看似毫无意义的#define的function的相关知识,那么本文是一篇不可错过的文章,我们将对毫无意义的比较进行全面详尽的解释,并且为您提供关于#definefunc1(x)func2(

如果您想了解看似毫无意义的#define的function的相关知识,那么本文是一篇不可错过的文章,我们将对毫无意义的比较进行全面详尽的解释,并且为您提供关于#define func1(x) func2(x,y,z) #define func1(x,y) func2(x,y) 这两个宏定义是什么意思???谁给个答案?、(function ($, undefined){ })(jQuery); 的使用及说明、** exception error: undefined function appmon:start/0、call to undefined function curl_init()的有价值的信息。

本文目录一览:

看似毫无意义的#define的function(毫无意义的比较)

看似毫无意义的#define的function(毫无意义的比较)

我遇到了一些代码:

BOOL CBlahClass::SomeFunction(DWORD *pdw) { RETURN_FALSE_IF_FILE_DOESNT_EXIST //the rest of the code makes sense... //... }

我看到的所有东西都很好理解,除了我对RETURN_FALSE_IF_FILE_DOESNT_EXIST行有一些疑问

我search了这个string,我find了一个#define:

#define RETURN_FALSE_IF_FILE_DOESNT_EXIST if (FALSE==DoesFileExist()) return FALSE;

我的问题是……到底是什么? 有没有什么好的理由来做这样的#define? 为什么不写:

什么是在Windows上使用Python的虚假OSError,13(EACCES)的一个很好的解决scheme

ruby的vim支持在windows上

我如何在Windows中运行python doctest?

PyQt:qstyledItemDelegate在QTableView在Windows Vista / 7?

win32 – 第二次调用EM_SETTEXTEX将不能正确显示附加文本。 为什么?

BOOL CBlahClass::SomeFunction(DWORD *pdw) { if ( FALSE == DoesFileExist() ) return FALSE //the rest of the code makes sense... //... }

我能想到这样做的唯一原因是,写出“RETURN_FALSE_IF_FILE_DOESNT_EXIST”,然后写出“if(FALSE == DoesFileExist())返回FALSE”,这样稍微简单一些,烦人一点 。

任何人都可以看到其他的理由来做到这一点 有这样的事情吗?

代表时代之前的date

使用Windows中的BeautifulSoup4,Chardet和Python 3.3parsing页面时出错

Python命名实体识别错误:IndexError:列表索引超出范围

PyInstaller构buildWindows EXE失败,多处理

Win API句柄的封装类

那么使用这个宏的想法是在这个特定的检查可能改变的情况下简化维护。 当你有一个宏时,所有你必须改变的是宏定义,而不是爬遍整个程序并单独更改每个检查。 此外,它使您有机会通过更改宏定义完全消除此检查。

一般来说,当一个代码有相当全面的重复代码时,通常会将代码分隔成一个函数。 但是,当那些重复的代码必须执行一些非正统的操作时,如退出封闭函数,宏基本上是唯一的选择。 (可能会认为像这样的技巧应该保留给调试/维护/系统级代码,并且应该在应用程序级代码中避免)。

这个宏可能是一个断言的先决条件。 前提条件是某个文件必须存在,因为如果没有这个函数调用该函数是没有意义的。 作者可能希望保守条款与“常规”的检查明显不同,并使之成为一个明显的宏观。 这是一个宏,这只是一个风格偏好。

当你要求一个条件为真时,你写一个守卫条款继续。 在一个名为parseFile()的函数中,您可能确实希望调用者检查了文件是否存在。 但是在一个名为openFile()的函数中,这个文件还不存在是完全合理的(因此你不会有警惕)。

你可能更习惯于看到assert(...) 。 但是如果你不希望你的程序在条件错误时停止,并且你想要在NDEBUG存在的情况下检查条件? 你可以实现一个像assert_but_return_false_on_fail(...)的宏,对吧? 这就是这个宏。 另一个assert() 。

glib是一个非常流行的库,它定义了如下的前提条件 :

#define g_return_if_fail() #define g_return_val_if_fail() #define g_return_if_reached #define g_return_val_if_reached() #define g_warn_if_fail() #define g_warn_if_reached

你在glib中的代码是g_return_val_if_fail(DoesFileExist(),FALSE); 。

你粘贴的代码可能会更好。 有些问题是:

这是非常具体的。 为什么不在任何条件下使用泛型,而不仅仅是文件是否存在?

返回值被硬编码到名称中。

它不会做进一步的诊断。 glib函数在失败时会记录一个相当详细的错误,包括堆栈跟踪,以便您可以看到导致失败的一系列调用。

这些问题是宏观看起来愚蠢和毫无意义的原因。 否则,这似乎没有多大意义。

或者,作者可能是宏观迷恋的,我正在读太多的东西。

没有理由。 程序员编写这样的宏的一个常见方式是因为它们具有多重返回语句的代码(如果可能的话应该避免这种情况 – 但有时避免它是不明智的)。 例:

// Bad code err_t func (void) { err_t err; ... if(err == error1) { cleanup(); return err; } ... if(err == error2) { cleanup(); return err; } cleanup(); return err; }

由于代码的重复,对整个函数进行清理是不好的做法。

解决这个问题的古老方法是“错误的转向”,在这个函数的最后放置一个标签。 并做清理,并只在那里返回。 这实际上是一个有点可以接受的解决方案,但转到是禁忌,所以人们避而远之。 相反,他们拿出这样的东西:

// Slightly less bad code #define RETURN_FROM_FUNCTION(err) { cleanup(); return (err); } err_t func (void) { err_t err; ... if(err == error1) { RETURN_FROM_FUNCTION(err); } ... if(err == error2) { RETURN_FROM_FUNCTION(err); } RETURN_FROM_FUNCTION(err); }

这消除了代码重复,所以程序更安全,更容易维护。 这可能是你的问题的答案。

但是这个宏仍然不是一个好的解决方案,因为它使得代码难以阅读,因为C程序员擅长阅读C语言,但是阅读“家酿,秘密的宏语言”却不好。 当然还有宏的常见问题:类型安全,难以调试/维护等。

但是,上述所有的方法(包括on-error-goto)都源于无法思考的问题。 最佳的解决方案是这样的:

// proper code err_t func (void) { err_t err; allocate(); // allocate whatever needs to be allocated err = func_internal(); cleanup(); // one single place for clean-up return err; } static err_t func_internal (void) // local file scope,private function { err_t err; ... allocate_if_needed(); // or maybe allocation needs to be here,based on results ... if(if(err == error1) { return err; } ... if(err == error2) { return err; } return err; }

总结

以上是小编为你收集整理的看似毫无意义的#define的function全部内容。

如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。

#define func1(x) func2(x,y,z) #define func1(x,y) func2(x,y) 这两个宏定义是什么意思???谁给个答案?

#define func1(x) func2(x,y,z) #define func1(x,y) func2(x,y) 这两个宏定义是什么意思???谁给个答案?

#define func1(x) func2(x,y,z)

#define func1(x,y) func2(x,y)

这两个宏定义是什么意思???谁给个答案?

这是什么用法,看linux kernel 和其他的c代码看到的,不懂,求指导。

(function ($, undefined){ })(jQuery); 的使用及说明

(function ($, undefined){ })(jQuery); 的使用及说明

细说;(function ($, undefined){ })(jQuery); 的使用:

1. 对于function前面的分号(;)的使用:使用分号的目的是为了防止多个文件压缩合并时,以为其他文件最后一行语句没加分号,而引起合并后的语法错误。

2. (function ($, undefined){ })(jQuery)这是一个匿名的函数,一般js库都采用这种自执行的匿名函数来保护内部变量。

3.使用undefined的原因:

(1)因为undefined是window的属性,声明为局部变量之后,在函数中如果再有变量与undefined做比较的话,程序就可以不用搜索undefined到window,可以提高程序的性能。

(2)undefined在版本较旧的浏览器是不被支持的,直接使用会报错,js框架就要考虑到兼容性问题,故增加一个形参undefined

4. $实参:$是jQuery的简写,很多方法和类库也使用$,这里$接收 ,也是为了避免$变量冲突,保证插件可以正常运行。   

windowwindow,document);  : function这个函数还可以传window, document这两个实参,这两个

实参分别接收windowdocument这两个对象,windowdocument这两个对象都是全局环境下的,而在函数体内的windowdocument其实是局部变量,不是指全部的

window,或是document对象。这样做有个好处就是可以提高性能,减少作用域的查询时间,如果你在函数体内需要多次调用window,或是document对象,这样把window

或是document对象作为参数传进去,是非常有必要的。如果你的插件中没有用到这两个对象,那么就不需要传这两个参数了。

** exception error: undefined function appmon:start/0

** exception error: undefined function appmon:start/0

这个 appmon,在 erl17 以后改成 observer 了。所以如果你打命令 appmon:start () 无法启动,可以试试 observer:start ().

observer:start().

 

call to undefined function curl_init()

call to undefined function curl_init()

配置PHP开发环境,当运行项目的时候发现报call to undefined function curl_init()错误

解决方法如下:

1、在PHP.ini中找到extension=php_curl.dll,去掉前面的分号,PHP.ini在PHP的安装目录下;

2、在PHP.ini中找到extension_dir = "ext",去掉前面的;,改为extension_dir = "D:/wamp/PHP;-5.6.30/ext"; "D:/wamp/PHP;-5.6.30/ext"只是示例,表示扩展的路径

3、php_curl.dll、libeay32.dll、ssleay32.dll、PHP5ts.dll都拷到system32(C:\Windows\System32)下面去;

4、然后重启电脑,故障解决。

如果重启之后不能解决,仍然报call to undefined function curl_init()错误,说明system32下还缺少一些dll文件,将PHP安装目录下的所有后缀为dll的文件都拷贝到system32目录下,重启电脑,这样一定能解决。

关于看似毫无意义的#define的function毫无意义的比较的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于#define func1(x) func2(x,y,z) #define func1(x,y) func2(x,y) 这两个宏定义是什么意思???谁给个答案?、(function ($, undefined){ })(jQuery); 的使用及说明、** exception error: undefined function appmon:start/0、call to undefined function curl_init()等相关内容,可以在本站寻找。

本文标签: