标签: header-files

我可以编写没有标题的C++代码(重复的函数声明)吗?

有没有办法不必编写两次函数声明(头文件),并且在编译时仍然保持相同的可伸缩性,调试的清晰度和在C++中编程时的设计灵活性?

c++ header header-files

56
推荐指数
8
解决办法
4万
查看次数

如何在Linux中找到C编程语言的头文件?

当我在Linux中编写C程序,然后使用gcc编译它们时,我总是很好奇这些头文件的位置.例如,在哪里stdio.h.更一般地说,在哪里stdbool.h?

我想知道的不仅仅是它的位置,还有如何获取这些地方,例如,使用shell命令或使用C编程语言.

c linux gcc header-files

52
推荐指数
4
解决办法
7万
查看次数

C中的头文件和源文件如何工作?

我仔细研究了可能的副本,但是没有任何答案在沉没.

tl; dr:源文件和头文件是如何相关的C?项目是否在构建时隐式地整理声明/定义依赖项?

我试图理解编译器如何理解.c和.h文件之间的关系.

鉴于这些文件:

header.h:

int returnSeven(void);
Run Code Online (Sandbox Code Playgroud)

source.c:

int returnSeven(void){
    return 7;
}
Run Code Online (Sandbox Code Playgroud)

main.c:

#include <stdio.h>
#include <stdlib.h>
#include "header.h"
int main(void){
    printf("%d", returnSeven());
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这个混乱会编译吗?我目前正在使用Cygwin的gcc在NetBeans 7.0中完成我的工作,它可以自动执行大部分构建任务.编译项目时,涉及的项目文件是否根据声明中的隐含包含?source.cheader.h

c compilation header-files

51
推荐指数
4
解决办法
6万
查看次数

不止一次在C/C++中包含头文件

在C或C++中多次包含头文件是否有用?

如果从未使用过该机制,为什么编译器会担心包含两次文件; 如果真的没用,如果新的编译器确保每个标题只包含一次,那会不会更方便?

编辑:

我知道有一些标准的方法可以做一次包括警卫和编译指示在内的事情,但为什么你必须指定甚至呢?不应该只是编译器的默认行为只包含一次文件吗?

c c++ header-files

48
推荐指数
4
解决办法
5335
查看次数

如何让Xcode找到文件FacebookSDK.h?

它说"未找到FacebookSDK/FacebookSDK.h文件"

然而,我可以在#import上跳转到定义并将它带到文件中.

一旦我添加#import,它现在知道FBFriendPickerDelegate是什么,现在它在该行上没有错误.

我在我的项目和正确的文件夹中有facebookSDK.framework.这是SDK 3.1.我尝试将搜索路径添加到/ FacebookSDK和/FacebookSDK.framework和/ FacebookSDK/Versions/A/Headers等.我还尝试了#import"FacebookSDK.framework/Versions/A/Headers/FacebookSDK.h",它仍然说它可以找不到它.我也试过干净并重新启动.我有最新版本的Xcode.

//
//  FacebookView.h
//

#import <UIKit/UIKit.h>
#import <FacebookSDK/FacebookSDK.h>

@interface FacebookView : UIViewController <FBFriendPickerDelegate>
{
}
Run Code Online (Sandbox Code Playgroud)

xcode header-files facebook-ios-sdk

48
推荐指数
4
解决办法
6万
查看次数

<string>和<string.h>之间的区别?

怎么来这个代码

std::map <std::string , int> m;
m["a"]=1;
Run Code Online (Sandbox Code Playgroud)

编译(我正在使用MSVC 2010)

#include <string>
Run Code Online (Sandbox Code Playgroud)

但没有

#include <string.h>
Run Code Online (Sandbox Code Playgroud)

?

c++ string header header-files

47
推荐指数
6
解决办法
5万
查看次数

使用cmake处理头文件依赖项

我在一个小型的C++项目中使用CMake,到目前为止它运行得很好......有一个转折:x

当我更改头文件时,通常需要重新编译许多源文件(直接或间接包含它们的文件),但是cmake似乎只检测了一些要重新编译的源文件,从而导致状态损坏.我可以通过消除项目并从头开始重建来解决这个问题,但这绕过了使用make实用程序的目标:只重新编译所需的内容.

因此,我想我做错了什么.

我的项目非常简单有条理:

  • 所有资源都在的顶级目录,主CMakeLists.txt就在那里
  • 所有公共标题所在的"include"目录(在各个子目录中)
  • 一个"src"目录,其中源文件的所有子目录都是,src CMakeLists.txt就在那里
  • "src"目录中每个子目录的CMakeLists.txt

主目录有:

cmake_minimum_required(VERSION 2.8)

project(FOO)

set(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR}/bin)

# Compiler Options
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -std=c++0x -Wall -Wextra -Werror")

include_directories($(FOO_SOURCE_DIR)/include)

add_subdirectory(src)
Run Code Online (Sandbox Code Playgroud)

"src"目录:

add_subdirectory(sub1)
add_subdirectory(sub2)
add_subdirectory(sub3)
add_subdirectory(sub4)

add_executable(foo main.cpp)

target_link_libraries(foo sub1 sub2 sub3 sub4)
Run Code Online (Sandbox Code Playgroud)

哪sub4取决于sub3哪个取决于sub2哪个取决于sub1

以及子目录(sub3)的示例:

set(SUB3_SRCS
    File1.cpp
    File2.cpp
    File3.cpp
    File4.cpp
    File5.cpp
    File6.cpp
    )

add_library(sub3 ${SUB3_SRCS})

target_link_libraries(sub3 sub1 sub2)
Run Code Online (Sandbox Code Playgroud)

我很高兴如果有人能把我的错误指向我,在这里搜索或在CMake上没有产生任何东西,所以我想这很容易或应该开箱即用......

(供参考,我在MSYS上使用cmake版本2.8.2)

编辑:

感谢Bill的建议,我已经检查了depend.makeCMake生成的文件,而且确实缺乏(严重).这是一个例子:

src/sub3/CMakeFiles/sub3.dir/File1.cpp.obj: ../src/sub3/File1.cpp
Run Code Online (Sandbox Code Playgroud)

是的,这就是所有,包括的所有内容都被引用:x

c++ dependencies cmake header-files

46
推荐指数
2
解决办法
5万
查看次数

46
推荐指数
2
解决办法
2万
查看次数

调用内联函数时未定义的引用

我从GCC 4.8.1得到一个非常奇怪的错误,内联函数.

我在头文件(debug.h和error.h)中定义了两个几乎相同的内联函数src/include/,唯一的区别是它们打印的内容 - DEBUG:消息的一个前缀,另一个%s: error: %s(程序名,错误消息).在定义内联函数和编译调试版本时(因此它设置宏DEBUG=1),我得到了许多未定义的引用错误:

src/main_debug.o
  gcc -osrc/main_debug.o src/main.c -c -Wall -Wextra -Wpedantic -std=gnu11 -march=native -Og -g -DCC="\"gcc\"" -DCFLAGS="\"-Wall -Wextra -Wpedantic -std=gnu11 -march=native -Og -g\"" -DDEBUG=1 -DBTCWATCH_VERSION="\"0.0.1\""

src/lib/btcapi_debug.o
  gcc -osrc/lib/btcapi_debug.o src/lib/btcapi.c -c -Wall -Wextra -Wpedantic -std=gnu11 -march=native -Og -g -DCC="\"gcc\"" -DCFLAGS="\"-Wall -Wextra -Wpedantic -std=gnu11 -march=native -Og -g\"" -DDEBUG=1

src/lib/libbtcapi_debug.a
  ar rc src/lib/libbtcapi_debug.a src/lib/btcapi_debug.o
  ranlib src/lib/libbtcapi_debug.a

src/lib/cmdlineutils_debug.o
  gcc -o src/lib/cmdlineutils_debug.o src/lib/cmdlineutils.c -c -Wall -Wextra -Wpedantic -std=gnu11 -march=native -Og …
Run Code Online (Sandbox Code Playgroud)

c inline function undefined header-files

46
推荐指数
2
解决办法
3万
查看次数

如何使用该工具包括你和CMake一起使用什么来检测未使用的标头?

该工具include-what-you-use可用于检测不需要的标头.我正在使用CMake来完成我的C++软件项目.如何指示CMake在我的软件项目的源文件上自动运行包含什么?

c++ cmake header-files

45
推荐指数
3
解决办法
1万
查看次数