我使用TCP将文件从客户端发送到服务器。 要标记文件的结尾,我希望在实际数据之前发送文件大小。 所以我使用stat系统调用来查找文件的大小。 这是typesoff_t 。 我想知道它占用了多less字节,以便我可以在服务器端正确读取它。 它在<sys/types.h>定义。 但是我不明白这个定义。 它只是将__off_t or _off64_t定义为off_t 。 在哪里寻找__off_t ? 也是约定, __是头文件中的大部分事物的前缀,当我阅读头文件以更好地理解时,会吓到我。 如何更好地读取头文件? #ifndef __off_t_defined # ifndef __USE_FILE_OFFSET64 typedef __off_t off_t; # else typedef __off64_t off_t; # endif # define __off_t_defined #endif
在代码审查过程中,我的一位同事向我提到,在头部用作函数参数的“原始types”之前的“const”是毫无意义的,他build议删除这些“const”。 在这种情况下,他build议只在源文件中使用“const”。 原始types是指诸如“int”,“char”,“float”等的types 以下是例子。 example.h文件 int ProcessScore(const int score); example.cc int ProcessScore(const int score) { // Do some calculation using score return some_value; } 他的build议是这样做的: example.h文件 int ProcessScore(int score); // const is removed here. example.cc int ProcessScore(const int score) { // Do some calculation using score return some_value; } 但是我有些困惑。 通常情况下,用户只看标题,所以如果标题和源文件不一致,可能会造成混淆。 任何人都可以提供一些build议吗?
我有一个项目,正确地编译和运行在g ++ 4.8.1和铿锵> = 3.3在c + + 11模式。 但是,当我切换到实验-std=c++1y模式时,在通过Boost.Test间接包含的<cstdio>头文件中的clang 3.3(但不是g ++)扼stream圈(所以我不能轻易地自己改变它) // /usr/include/c++/4.8/cstdio #include <stdio.h> // Get rid of those macros defined in <stdio.h> in lieu of real functions. // … #undef gets // … namespace std { // … using ::gets; // <– error with clang++ -std=c++1y // … } 与以下错误消息: /usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../include/c++/4.8/cstdio:119:11:错误:在全局中没有名为“gets”的成员命名空间 在本教程中 ,如何设置一个现代的C […]
当编写C ++ 11代码来为类的头文件中的类成员设置默认值时,是不是很好的做法? 还是在这个类的构造函数中做这个更好? 编辑: 我的意思是: foo.h : #include <string> using std::string; class Foo{ private: string greet = "hello"; public: Foo(); }; VS foo.cpp (当然有必要的头文件,但没有在类初始化): Foo::Foo(){ greet = "hello"; } 哪一个更好,为什么?
我通过导入语句成功地从Objective C(针对“MyApp”目标)调用Swift类: #import "MyApp-Swift.h" 我现在创build了一个名为“MyAppLite”的新目标 当我编译新的目标时,我得到错误,因为代码需要“MyApp-Swift.h”,但编译器正在创build“MyAppLite-Swift.h” 所以,我需要为我正在编译的目标创build一个有条件的Swift / ObjC头文件#import 。 如何做到这一点,还是有更好的办法?
您可以构造一个C ++程序,以便(几乎)所有的代码都驻留在头文件中。 它本质上看起来像一个C#或Java程序。 但是,编译时,至less需要一个.cpp文件来引入所有头文件。 现在我知道有些人会绝对厌恶这个想法。 但我还没有发现这样做的任何令人信服的缺点。 我可以列举一些优点: [1]更快的编译时间。 所有的头文件只被parsing一次,因为只有一个.cpp文件。 此外,一个头文件不能被包含超过一次,否则你将得到一个生成中断。 当使用替代方法时,还有其他方法可以实现更快的编译,但是这非常简单。 [2]它通过使它们绝对清楚,避免循环依赖。 如果ClassA.h中的ClassA对ClassA.h中的ClassB具有循环依赖关系,那么我必须提供一个前向引用。 (请注意,这不像C#和Java,编译器自动解决循环依赖,这鼓励了错误的编码实践IMO)。 同样,如果你的代码是在.cpp文件中,你可以避免循环依赖,但是在真实世界的项目中, .cpp文件往往会包含随机的头文件,直到找不到谁依赖于谁。 你的想法?
在C或C ++中多次包含头文件是否有用? 如果这个机制从来没有被使用,为什么编译器会担心包含一个文件两次; 如果真的没用,如果新的编译器确保每个头只包含一次,会不会更方便? 编辑: 我知道有一些标准的做法,比如包括警卫和杂注 ,但是为什么还要指定呢? 编译器的默认行为不应该只包含一次文件吗?
在处理一个大的C / C ++项目时,你有关于源代码或头文件中#include的一些特定规则吗? 例如,我们可以设想遵循这两个过分的规则之一: .h文件中禁止#include ; 每个.c文件都要包含所有需要的头文件 每个.h文件都应该包含所有的依赖关系,即它应该能够单独编译而不会出现任何错误。 我想在任何项目之间都有权衡,但是你的是什么? 你有更具体的规则吗? 或任何解决scheme争论的任何链接?
它说“FacebookSDK / FacebookSDK.h文件未find” 然而,我可以跳转到#import的定义,它把我带到文件。 而且,一旦我添加了#import,它现在知道FBFriendPickerDelegate是什么,它现在没有在该行上的错误。 我在我的项目和正确的文件夹中有facebookSDK.framework。 这是SDK 3.1。 我试图添加到/ FacebookSDK和/FacebookSDK.framework和/ FacebookSDK /版本/ A /头等searchpath。我也尝试#import“FacebookSDK.framework /版本/ A /头/ FacebookSDK.h”,它仍然说,它可以找不到。 我也尝试干净,重新启动。 我有最新版本的Xcode。 // // FacebookView.h // #import <UIKit/UIKit.h> #import <FacebookSDK/FacebookSDK.h> @interface FacebookView : UIViewController <FBFriendPickerDelegate> { }
考虑一对两个源文件:一个接口声明文件( *.h或*.hpp )及其实现文件( *.cpp )。 让*.h文件如下所示: namespace MyNamespace { class MyClass { public: int foo(); }; } 我已经看到了在源文件中使用名称空间的两种不同的做法: *.cpp显示练习#1: #include "MyClass.h" using namespace MyNamespace; int MyClass::foo() { … } *.cpp显示练习2: #include "MyClass.h" namespace MyNamespace { int MyClass::foo() { … } } 我的问题:这两种做法是否有区别,是否被认为比另一种更好?