c++如何在编译期输出自定义信息

酱油党 2012-04-09 09:58:15
如题:如
char cSay[] = "Hello";
DEBUGMSG( TRUE , ....);

如何在编译期输出Hello,以上!!!
求方法或思路,最好不要超级高深,有现成的库也可以……
...全文
1373 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
WL_river 2012-11-27
  • 打赏
  • 举报
回复
侯捷译的《modern c++ desing》中: template < bool > struct CompileTimeChecker { CompileTimeChecker(...); }; template <> struct CompileTimeChecker< false > { }; // //FIXME: Work incorrectly. #define STATIC_CHECK(expr, msg) \ { \ class ERROR_##msg {}; \ (void)sizeof( CompileTimeChecker<(expr)>( ERROR_##msg() )); \ } 这个在vs08, vs2012运行宏STATIC_CHECK时报错,具体报错信息你自己实践一下看. Google的Chromium代码中: template < bool > struct CompilePrompt_{ }; #define COMPILE_PROMPT( expr, msg ) \ typedef CompilePrompt_< (bool(expr)) > msg[(bool(expr) ? 1 : -1)] vs08, vs2012下,值提示 负下标. 欢迎各路大侠提供完美的编译期自定义信息提示.thx!
酱油党 2012-04-16
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 的回复:]
输出部分在Debug下
[/Quote]
兄弟…那是在运行期,运行期都能做到自主弹出对话框,还是美化的那种,不过谢谢拉
酱油党 2012-04-16
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 的回复:]
引用 18 楼 的回复:
#pragma message("here")
这个不成,只能用于编译的时候是否对否对某个文件进行链接有点用……
晕,需求用例,工程超级大的,用例写不了,
简单点就是通过某种方法使编译期能够完成代码执行流程的检测:
如A-B-C
A-C-B
输出流程信息,类似的,或者是通过某种方式能够在编译期体现出代码的调用…
我现在自己感觉可行性不大,除非整个工程全部通……
[/Quote]
…我也是很好奇,不过据说元编程能够将数值计算和类型计算全部挪到编译期,(数值计算能做到,类型如果只是模板类型替换的话也能做到,但是……眼泪啊,他要求的做不到)
退而求其次吧…但是其次的效果早就完成了……这个现在只能对类型是否有具体的某个方法进行报错…达不到要求啊,还好是一个优先级低的长期的研究项目……
ohayou 2012-04-13
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 的回复:]
#pragma message("here")
这个不成,只能用于编译的时候是否对否对某个文件进行链接有点用……
晕,需求用例,工程超级大的,用例写不了,
简单点就是通过某种方法使编译期能够完成代码执行流程的检测:
如A-B-C
A-C-B
输出流程信息,类似的,或者是通过某种方式能够在编译期体现出代码的调用…
我现在自己感觉可行性不大,除非整个工程全部通过元函数改写…求神人…………
[/Quote]
编译的时候怎么能知道执行的流程?
k466150626 2012-04-11
  • 打赏
  • 举报
回复
输出部分在Debug下
k466150626 2012-04-11
  • 打赏
  • 举报
回复
DEBUG用 TRACE
不怕弹死就用MessageBox

要是RELESE 我都用MessageBox弹到死
酱油党 2012-04-11
  • 打赏
  • 举报
回复
顶,谁有没有类似功能的替代方案啊…
感觉这个是在跟编译器较劲的一个需求,很难实现,
模板除了减少代码量进行型别检查(感觉这个沾点边,但怎样将型别检查转换为::warming编译输出,且对原函数没有影响…)
酱油党 2012-04-10
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 的回复:]

#pragma message可以。vc的cl和g++都没有问题。
C/C++ code

#pragma message("here")

int main()
{
return 0;
}
g++ compile_message.cpp
compile_message.cpp:2:23: 附注:#pragma message:here
[/Quote]
回去试一下,还真没想到这个,但是这个好像还真不好说能不能通过某种包装来满足需求,先谢过啦……
酱油党 2012-04-10
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 的回复:]

引用 6 楼 的回复:

……我不是想要错误啊,只是想在代码编译期完成,代码分支情况的输出,代码分支很多,想通过这个作为分支检测的简单方式,,,但是超级没有思路,,,组长说元编程能实现,但是我感觉不能,虽然我还不怎么会元编程……

还是说一下原始的需求吧,主楼的要求不好实现。编译器原则上只输出程序的错误和警告,所谓的元编程输出,也只是一种将所需输出的信息巧妙夹杂在编译器错误信息的技巧,……
[/Quote]你说的这种技巧是指把类通过模板进行封装,能够在调用方法的术后能够对是否有这种方法进行检查吗?
还是有什么更高的?如果我理解的不对解释下啊,希望能够对我的需求具有帮助,不管怎样,先谢谢各位啦!
酱油党 2012-04-10
  • 打赏
  • 举报
回复
呵呵,原始需求是一个大型软件的对不同平台的不同模型(如分辨率,屏幕尺寸)的程序代码封装整合在了一个程序中,但是由于分支太多,增强了测试的复杂型,需要在运行不同模型代码的时候最好做到编译期能够进行输出,方便流程,==='要求是挺变态的,现在是能够做到在运行期输出或者写运行流程的log文件,但如何能够把不同代码分支的运行情况在编译期通过某种方式体现出来至今毫无头绪===
酱油党 2012-04-10
  • 打赏
  • 举报
回复
#pragma message("here")
这个不成,只能用于编译的时候是否对否对某个文件进行链接有点用……
晕,需求用例,工程超级大的,用例写不了,
简单点就是通过某种方法使编译期能够完成代码执行流程的检测:
如A-B-C
A-C-B
输出流程信息,类似的,或者是通过某种方式能够在编译期体现出代码的调用…
我现在自己感觉可行性不大,除非整个工程全部通过元函数改写…求神人……
cbzjzsb123 2012-04-10
  • 打赏
  • 举报
回复
看懂需求是什么 LZ能不能写个详细点的用例?
ohayou 2012-04-10
  • 打赏
  • 举报
回复
还是没看懂需求是什么 LZ能不能写个详细点的用例?
viktor 2012-04-09
  • 打赏
  • 举报
回复
#pragma message可以。vc的cl和g++都没有问题。

#pragma message("here")

int main()
{
return 0;
}
g++ compile_message.cpp
compile_message.cpp:2:23: 附注:#pragma message:here

ri_aje 2012-04-09
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

……我不是想要错误啊,只是想在代码编译期完成,代码分支情况的输出,代码分支很多,想通过这个作为分支检测的简单方式,,,但是超级没有思路,,,组长说元编程能实现,但是我感觉不能,虽然我还不怎么会元编程……
[/Quote]
还是说一下原始的需求吧,主楼的要求不好实现。编译器原则上只输出程序的错误和警告,所谓的元编程输出,也只是一种将所需输出的信息巧妙夹杂在编译器错误信息的技巧,但是在程序本身无错误的情况下,这种技巧就不好用了。
ohayou 2012-04-09
  • 打赏
  • 举报
回复
#pragma message正解
ycf128 2012-04-09
  • 打赏
  • 举报
回复
试试
#pragma message("hello")
酱油党 2012-04-09
  • 打赏
  • 举报
回复
求懂模板元编程人士,给思路或这说说能不能实现,为什么啊……
分是可以加+++的……
其他方式要是能实现就更好啦……
顶……
酱油党 2012-04-09
  • 打赏
  • 举报
回复
……我不是想要错误啊,只是想在代码编译期完成,代码分支情况的输出,代码分支很多,想通过这个作为分支检测的简单方式,,,但是超级没有思路,,,组长说元编程能实现,但是我感觉不能,虽然我还不怎么会元编程……
pengzhixi 2012-04-09
  • 打赏
  • 举报
回复
如果你能把你这些字符串作为一个类名称的话还有可能会让编译器提示相关的错误,如果是这样你可以去看看c++设计新思维 有关编译期的一些内容。
加载更多回复(3)

64,670

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧