求大神 帮写个宏
需要编写一个宏,如MAXMAX(count);
当把上面的宏插入循环体或函数中的时候,循环体最多只能执行count次则结束返回0结束过程,并且只能在其作用域内有效,举例如下:
[解决办法]
和二楼一样,显示是不行,再说同一作用域内显然不能重定义。
大括号括住
[解决办法]
和二楼一样,显示是不行,再说同一作用域内显然不能重定义。
大括号括住
大括号括住, 不用 static
[解决办法]
#define MAX_LOOP(cnt)\
static unsigned long MAX_LOOP##__LINE__ = 0;\
if(++MAX_LOOP##__LINE__ == cnt){\
MAX_LOOP##__LINE__ = 0;\
break;\
}
适用于循环,函数可以类似的改。
[解决办法]
更正:
这个数组定多大?怎么初始化/赋值?这个数组的赋值怎么解决自己的多线程并发?
[解决办法]
只需解决有多少个线程的问题,这个是可以获取到的,另外线程数一般不会太多,虽然这是个问题,不过不是很大的问题。初始化很容易,不解释。
[解决办法]
有道理~~~看来是不太可能用一个宏实现了。。。一个宏必须使用静态或全局变量才能保存变量的值,但是要复位这个值就必须知道什么时候跳出了循环,如果不是从宏跳出去,则没有办法知道,也就没有办法复位。。。
坐等大神。
[解决办法]
这个可以加一!
[解决办法]
语法糖越甜,编译调试查错越苦!
------解决方案--------------------
为什么非要用宏?
[解决办法]
学习,都是牛人吖,佩服~

[解决办法]

别再纠结这些没用的东西了
[解决办法]
在宏外,while(1)外定义int _MAXMAX_COUNT_,在宏内赋值,使用
[解决办法]
实现这个宏,必须:
1.计数必须和代码上下文相关
2.计数必须线程安全
未考虑线程安全:
template
<int _loop_count,class _base>
class _max_loop_ {
private:
static int _count;
public:
_max_loop_ () {
_count --;
}
bool _over() {
bool b = false;
if (_count < 0)
{
_count = _loop_count;
}
return _count == _loop_count;
}
};
template
<int _loop_count,class _base>
int _max_loop_<_loop_count,_base>::_count = _loop_count;
#define MAXMAX_INML(_loop_count,_cpptime) \
class _max_loop##_cpptime : public _max_loop_<_loop_count,_max_loop##_cpptime> {};_max_loop##_cpptime _loop; if (_loop._over()) break;
#define MAXMAX(_loop_count) MAXMAX_INML(_loop_count,__TIME__)
int _tmain(int argc, _TCHAR* argv[])
{
while(true) {
MAXMAX(100);
printf("loop\n");
}
return 0;
}
线程安全 每个计数通过threadId单独保存在某种hashmap里
而乖乖写代码:
for (i=0;i<count;i++)
{
}
i在调用栈里,天然满足所有要求
所以 没必要写宏
[解决办法]
抱歉
__TIME__ 或者 __FILE__ 都没办法确定上下文
代码重贴:
#include "stdafx.h"
#include <windows.h>
template
<int _loop_count, class identify, class _base>
class _max_loop_ {
private:
static int _count;
public:
_max_loop_ () {
_count --;
}
bool _over() {
printf("%s \n",__FUNCTION__);
bool b = false;
if (_count < 0)
{
_count = _loop_count;
}
return _count == _loop_count;
}
};
template
<int _loop_count,class identify, class _base>
int _max_loop_<_loop_count, identify, _base>::_count = _loop_count;
#define MAXMAX(_loop_count,_identify) class _identify {}; class _max_loop : public _max_loop_<_loop_count, _identify ,_max_loop> {};_max_loop _loop; if(_loop._over()) break;
int _tmain(int argc, _TCHAR* argv[])
{
printf("%s \n",__LINE__);
while(1)
{
MAXMAX(10,theCppName);
}
return 0;
}
[解决办法]
和二楼一样,显示是不行,再说同一作用域内显然不能重定义。
大括号括住
用static也不行,如下面的代码,第一次调用输出10次,而第二次调用只输出1次而已:
其实可以这样写,连static都没必要用。你用了static,就增加了一个静态变量,占用内存。只要在某个语句块内临时定义一个变量就OK了。出了这个语句块,变量就消失了。也不在乎外面的变量名是否是一样的,因为会被本语句块的变量给遮盖住。
其实可以这样写,连static都没必要用。你用了static,就增加了一个静态变量,占用内存。只要在某个语句块内临时定义一个变量就OK了。出了这个语句块,变量就消失了。也不在乎外面的变量名是否是一样的,因为会被本语句块的变量给遮盖住。
#define MAXMAX(times_) do{int i=times; while(times_--);}while(0)使用do{...}while(0)的做法比你们的可要好多了。
看错了,还应该要加个break在后面
#define MAXMAX(times_) do{int i=times; while(times_--);}while(0);break
[解决办法]
#define __cat_raw(x, y) x##y
#define __cat(x, y) __cat_raw(x, y)
#define MAXMAX(c) static __declspec(thread) int __cat(__MAXMAX__COUNTER__, __LINE__) = c; if (--__cat(__MAXMAX__COUNTER__, __LINE__) <= 0) break;
Oh, my god!!娱乐无极限啊
[解决办法]