姚冬,中老年程序员 进藤光.杨个毛.欧阳修 等人赞同 我是来反对楼上某些答案的.我曾经用MFC写了金山词霸(大约20多万行),又用Qt写了YY语音(大约100多万行),算是对两种框架都比较有经验.纠正几个错误的认识. 1. “用Qt写的程序编译比MFC慢”的说法是错误的绝对错误,单位代码行数编译Qt远比MFC快得多,因为Qt库的头文件设计非常好,尽量都使用了前置声明,避免了头文件嵌套,几乎所有类都使用了公有类和私有类的设计,把没必要公开的声明放到私有头文件里,避免了编译时引入过多代码.而MFC没…
错误提示:在添加的QThread子类头文件添加Q_OBJECT时,编译程序,出现"undefined reference to 'vtable for xxThread'"错误提示.原因:不详解决方案:清理项目,执行qmake,然后运行,错误提示消失.…
在Qt Creator中的工程中,工程通过.pro文件管理. 额外需要连接的连接库unix:LIBS += -L your_lib_path -lyour_libwin32:LIBS += your_lib_path/your_lib LIBS += -L./your_lib_path -lyour_lib LIBS += ./your_lib.lib 额外需要的头文件目录INCLUDEPATH += your_include_path 另外有一些比较重要的变量: SOURCES:应用程序中所有…
在编写一个自己写的gadget驱动的时候遇到一个这样的问题,编译的时候报了个警告:WARNING: "usb_composite_register" [-/my_zero.ko] undefined! 告诉我这个函数没有定义,但是生成了ko文件,将这个文件拷贝到开发板目录下insmod,同样也是报这是一个未知的符号: 通常这种问题是因为没有包含函数头文件,这个函数是在linux/usb/composite.c中定义的,在composite.h中声明,因此包含linux/usb/comp…
Go 我不懂,下面以 C++ 和 C# 对比来说明为什么 C++ 编译慢和 C# 编译快. C 和 C++ 文件的编译经过几个主要步骤: 处理续行符处理(“\”)之类的杂事 词法分析,解析出 tokens 来 预处理,宏展开,处理 #include ,然后对 #include 包含的文件又重复 1~3 步骤. 重新词法分析 语法分析生成抽象语法树 AST 语义分析 优化生成代码 C# 的步骤: 处理续行符处理(“\”)之类的杂事 词法分析,解析出 tokens 来 语法分析生成抽象语法树 AST…
在 C 语言中,头文件或包含文件通常是一个源代码文件,程序员使用编译器指令将头文件包含进其他源文件的开始(或头部),由编译器在处理另一个源文件时自动包含进来. 一个头文件一般包含类.子程序.变量和其他标识符的前置声明.需要在一个以上源文件中被声明的标识符可以放在一个头文件中,使用时在其他源文件中包含该头文件. 头文件作为模块的公共接口,在其中声明函数原型.对象和数据类型. 让我们首先创建一个头文件 add.h: #ifndef _ADD_H_ #define _ADD_H_ int add(in…
目录 Commen Sense 头文件 链接性 static 与链接性控制 extern 与外部链接性 Reference Commen Sense C++ 在编译时对每个翻译单元(Translation Unit,通常是文件,下文以文件代称)单独编译. 注意区分 声明(Declaration) 和 定义(Definition): 声明规定了变量的类型和名字: 定义则负责创建与名字关联的实体,定义还申请存储空间.[1] C++ 的"单定义规则"指出变量只能有一次定义. 注意区分 作用域…
0.前言     从学习C语言开始就慢慢开始接触makefile,查阅了很多的makefile的资料但总感觉没有真正掌握makefile,如果自己动手写一个makefile总觉得非常吃力.所以特意借助博客总结makefile的相关知识,通过例子说明makefile的具体用法.       例说makefile分为以下几个部分,更多内容请参考[例说makefile索引博文] 1.只有单个C文件     2.含有多个C文件         3.需要包括头文件路径     4.增加宏定义     5.…
今天再看二叉树的知识,看着看着就看到C/C++的头文件及头文件重复定义这一块去了.以前就看到过这个问题,但是自己一直没有用到这方面的东西,今天遇到就顺便总结一下,等以后忘了再回来看看. 首先明确一点C/C++头文件是要来干什么的?(http://baike.baidu.com/link?url=lMbCZqCAsBJ_rhifA82koGGjoJmbZUy1tTPNPzertEc7nxNr71Xqfm63GEuqA8Ze) 头文件的作用有三: 1.C\C++采用源文件单独编译为object文件,…
.h头文件是编译时必须的,lib是链接时需要的,dll是运行时需要的. 附加依赖项的是.lib不是.dll,若生成了DLL,则肯定也生成 LIB文件.如果要完成源代码的编译和链接,有头文件和lib就够了.如果也使动态连接的程序运行起来,有dll就够了.在开发和调试阶段,当然最好都有. .h .lib .dll三者的关系是: H文件作用是:声明函数接口 DLL文件作用是: 函数可执行代码 当我们在自己的程序中引用了一个H文件里的函数,编链器怎么知道该调用哪个DLL文件呢?这就是LIB文件的作用:…
0.前言     从学习C语言開始就慢慢開始接触makefile,查阅了非常多的makefile的资料但总感觉没有真正掌握makefile,假设自己动手写一个makefile总认为非常吃力.所以特意借助博客总结makefile的相关知识,通过样例说明makefile的详细使用方法.     例说makefile分为下面几个部分,很多其它内容请參考[例说makefile索引博文] 1.仅仅有单个C文件     2.含有多个C文件         3.须要包含头文件路径     4.添加宏定义  …
.h头文件是编译时必须的,lib是链接时需要的,dll是运行时需要的.附加依赖项的是.lib不是.dll,若生成了DLL,则肯定也生成 LIB文件.如果要完成源代码的编译和链接,有头文件和lib就够了.如果也使动态连接的程序运行起来,有dll就够了(放在Debug文件夹里).在开发和调试阶段,当然最好都有..h .lib .dll三者的关系是:H文件作用是:声明函数接口DLL文件作用是: 函数可执行代码当我们在自己的程序中引用了一个H文件里的函数,编链器怎么知道该调用哪个DLL文件呢?这就是LI…
想必很多人都看过“头文件中用到的 #ifndef/#define/#endif 来防止该头文件被重复引用”.但是是否能理解“被重复引用”是什么意思?头文件被重复引用了,会产生什么后果?是不是所有的头文件中都要加入#ifndef/#define/#endif 这些代码? 1. 其实“被重复引用”是指一个头文件在同一个cpp文件中被include了多次,这种错误常常是由于include嵌套造成的.如:存在a.h文件#include "c.h"而此时b.cpp文件导入了#include &q…
  c语言头文件怎么写?我一直有这样的疑问,但是也一直没去问问到底咋回事:所以今天一定要把它弄明白! 其实学会写头文件之后可以为我们省去不少事情,可以避免书写大量的重复代码.有利于整理思路.使代码脉络更加清晰... 总之,好处多多学起来还不难就对了,还在等什么快来看看吧!   首先,我们要建一个头文件,命名为abc.h   然后就是内容了,其大致格式如下: #ifndef __ABC_H__ //ifndef 实际上就是“if not define”  如果没有定义  #define __ABC…
想必很多人都看过“头文件中用到的 #ifndef/#define/#endif 来防止该头文件被重复引用”.但是是否能理解“被重复引用”是什么意思?头文件被重复引用了,会产生什么后果?是不是所有的头文件中都要加入#ifndef/#define/#endif 这些代码? 1. 其实“被重复引用”是指一个头文件在同一个cpp文件中被include了多次,这种错误常常是由于include嵌套造成的.如:存在a.h文件#include "c.h"而此时b.cpp文件导入了#include &q…
我发现类在做参数时,是可以不引用头文件,即不用#include"xxx.h"的,比如下面这样是没有问题的 #pragma once #include <string> #include <iostream> class Humankind; class Person { public: Person(); void sayHello(Humankind human); }; 但如果这个类是用来被继承,就编译不过,必须写头文件包含,即这样: #pragma onc…
一.类嵌套的疑问 C++头文件重复包含实在是一个令人头痛的问题,前一段时间在做一个简单的数据结构演示程序的时候,不只一次的遇到这种问题.假设我们有两个类A和B,分别定义在各自的有文件A.h和B.h中,但是在A中要用到B,B中也要用到A,但是这样的写法当然是错误的: class B; class A { public: B b; }; class B { public: A a; }; 因为在A对象中要开辟一块属于B的空间,而B中又有A的空间,是一个逻辑错误,无法实现的.在这里我们只需要把其中的一…
转自.h头文件. .lib库文件. .dll动态链接库文件之间的关系 h头文件作用:声明函数接口 dll动态链接库作用:含有函数的可执行代码 lib库有两种: (1)静态链接库(Static Libary,以下简称"静态库") (2)动态连接库(DLL,以下简称"动态库")的导入库(Import Libary,以下简称"导入库") 两者的区别: 实质是不一样的东西. 静态库本身就包含了实际执行代码.符号表等等,而对于导入库而言,其实际的执行代码位…
概述:在进行有关系统软件的安装的时候(编译一个新的驱动,或者安装一个系统级别的测试工具,例如systemtap),经常需要重新编译内核,相应的问题往往与内核头文件有关.那么,什么是内核头文件,为什么需要更新内核头文件?内核头文件作用是什么,如何更新?本文主要为你解答这些疑问. 1.内核头文件的发展历史 在 Linux 2.2/2.4 的纯真年代,内核头文件一直保持着 Unix 世界的"KISS"传统,只需将内核源码树中的头文件直接复制到 /usr/include 中即可使用,一切都是那…
在Qt Creator的项目中添加头文件和库 在Qt Creator中的工程中,工程通过.pro文件管理. 额外需要连接的连接库 unix:LIBS += -L your_lib_path -lyour_lib win32:LIBS += your_lib_path/your_lib 额外需要的头文件目录 INCLUDEPATH += your_include_path 如:在Windows平台下使用NAS网络磁盘映射需要特别注意,当然,本地磁盘也建议使用转义字符\: SSDIR=\\\\192…
原文:http://www.cppblog.com/liquidx/archive/2009/06/16/87811.html 要在windows环境下使用 #include <pthread.h>头文件,编译会提示没有该头文件, 此时需要下载PTHREAD在windows下的开发包 1.下载PTHREAD开发包,如pthreads-w32-2-8-0-release.exe 地址在这 ftp://sourceware.org/pub/pthreads-win32 2.双击该.exe文件,出现…
多数c语言的初学者对c工程开发过程各个阶段的作用理解不到位,而这方面的的知识又是实际开发过程中经常用到的技能点,所以就成为面试考察中一个重要的考察方面.例如:头文件的作用.头文件的内容:链接的作用和意义:条件编译的作用等等此类问题,接下来将c工程开发过程中的各种问题进行总结使大家能够自如应对这方面的面试题目. c工程开发经过以下几个阶段: 编辑-->预处理-->编译-->汇编-->链接-->运行-->调试 一.编辑阶段 根据自己需要选择合适的程序编辑器. 优秀的程序编辑…
1.头文件#include <> :表示引用标准库头文件,编译器会从系统配置的库环境中去寻找 2.头文件#include "":一般表示用户自己定义使用的头文件,编译器默认会从当前文件夹中寻找,如果找不到,则到系统默认库环境中去寻找. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 在C语言家族程序中,头文件被大量使用.一般而言,每个C++/C程序通常由头文件(header files)和…
gcc GCC, the GNU Compiler Collection - GNU Project - Free Software Foundation (FSF) http://gcc.gnu.org/ The GNU Compiler Collection includes front ends for C, C++, Objective-C, Fortran, Ada, and Go, as well as libraries for these languages (libstdc++…
最表面的机制是: 头文件是程序的界面(是代码界面),提供给程序员以  类.模版.函数等一系列的声明,让程序员知道应该怎么调用里面的"东西". 从动态链接库的角度看: 头文件提供界面,使得程序员在需要加载一个库函数的时候(这里也仅仅是举简单的例子)查看头文件就知道怎么加载这个动态库内部的函数. 从软件的扩展来说: 将头文件作为界面,再去定义它的实现,这样只要保证界面不变(头文件不变),就可以只修改实现文件,而不必修改其他的实现代码.比如你有一个sort()函数来排序,在一个大程序中,你后…
(1).h头文件是编译时必须的,lib是链接时需要的,dll是运行时需要的. 附加依赖项的是.lib 不是.dll 若生成了DLL ,则肯定也生成 LIB文件 如果要完成源代码的编译和链接,有头文件和lib就够了. 如果也使动态连接的程序运行起来,有dll就够了. 在开发和调试阶段,当然最好都有. .h .lib.dll三者的关系是: H文件 作用是:声明函数接口 DLL文件 作用是: 函数可执行代码 当我们在自己的程序中引用了一个H文件里的函数,编链器怎么知道该调用哪个DLL文件呢? 这就是L…
.h头文件是编译时必须的,lib是链接时需要的,dll是运行时需要的. 附加依赖项的是.lib不是.dll,若生成了DLL,则肯定也生成 LIB文件.如果要完成源代码的编译和链接,有头文件和lib就够了.如果也使动态连接的程序运行起来,有dll就够了.在开发和调试阶段,当然最好都有. .h .lib .dll三者的关系是: H文件作用是:声明函数接口 DLL文件作用是: 函数可执行代码 当我们在自己的程序中引用了一个H文件里的函数,编链器怎么知道该调用哪个DLL文件呢?这就是LIB文件的作用:…
预编译加速编译 QT也可以像VS那样使用预编译头文件来加速编译器的编译速度.首先在.pro文件中加入: CONFIG += precompiled_header 然后定义需要预编译的头文件: PRECOMPILED_HEADER = pch.h 其中pch.h头文件即为自定义的预编译头文件. 指定临时文件生成目录,使项目文件夹更干净 QT默认情况下把所有的编译中间文件都生成到debug和release文件夹里.可以在.pro文件中加入: MOC_DIR = tmp/moc RCC_DIR = t…
在继续增加预编译头文件前,先稍等. Xcode为我们创建了一个模板项目,很棒!但有一点不太令人满意,问题就在下图中: 这是一个新项目的初始文件目录,几乎所有文件都在同一级目录下,随着项目文件数量急速增加,这将是一场噩梦.所以,我们需要整理一下文件结构,这也算是初步的项目构架了. 还要注意一点,Xcode的base目录下,应该是有一个“Supporting Files”文件夹的,main.m文件在其中,而两个storyboard文件是在base目录下的.可是物理目录下,并非如此.因为Xcode的文…
预编译头文件是被很多编译器用来编译稳定的代码以及将编译好的稳定代码存储在二进制文件中用于提升编译性能.在随后的编译中,编译器将加载存储状态继续编译指定的文件.每一个随后的编译将更快,因为稳定的代码不需要再次编译.(译者注:本文为QtDoc 5.0:Using Precompiled Headers的译文) 工具/原料   Qt编程环境 添加预编译头文件到你的工程   1 qmake在一些平台支持使用预编译头文件(PCH,PreCompiled Headers)以及构建环境,包括: Windows…