在我们所有的C++课程,所有的老师总是把using namespace std;在之后#include在它们的S .h文件.从那时起,我觉得这很危险,因为在另一个程序中包含该标题我会将命名空间导入到我的程序中,可能没有意识到,打算或想要它(标题包含可以非常深入嵌套).
所以我的问题是双重的:我是对的,using namespace不应该在头文件中使用,和/或是否有某种方法来撤消它,例如:
//header.h
using namespace std {
.
.
.
}
Run Code Online (Sandbox Code Playgroud)
还有一个问题是:标题文件是否应该是#include相应.cpp文件所需的所有标题,只有那些标题定义所需的标题,并让.cpp文件#include为其余标题,或者没有,并声明它需要的所有内容extern?
问题背后的原因与上面相同:在包含.h文件时我不想要惊喜.
另外,如果我是对的,这是一个常见的错误吗?我的意思是在现实世界的编程和"真正的"项目中.
谢谢.
我应该将包含在头文件或源文件中吗?如果头文件包含include语句,那么如果我在源代码中包含该头文件,那么我的源文件是否包含我头文件中包含的所有文件?或者我应该只将它们包含在我的源文件中?
extern int ether_hostton (__const char *__hostname, struct ether_addr *__addr)
__THROW;
Run Code Online (Sandbox Code Playgroud)
我在Linux机器上的/usr/include/netinet/ether.h中找到了上面的函数定义.
有人可以在const(关键字),addr(标识符)和最后__THROW前面解释双下划线的含义.
我正在寻找一个工具来替换项目中的多行.例如:
#include "../DiscreteIO/Discrete.h"
#include "../PCI/pci.h"
#include "../Arinc429/ARINC429.h"
Run Code Online (Sandbox Code Playgroud)
同
#include "../PCI/pci.h"
#include "../DiscreteIO/DiscreteHW.h"
#include "../DiscreteIO/Discrete.h"
Run Code Online (Sandbox Code Playgroud)
我尝试了两种适用于此类搜索和替换的工具.Wildedit和实际搜索和替换两者似乎都是出色的工具,但它们是共享软件.有人知道类似的工具吗?有什么免费或是时候分钱?
澄清:
在这种情况下通过一个项目意味着一千多个c文件.文本编辑器一次只能执行一个文件(Textpad,Programmers notepad)或所有打开的文件(nodepad ++).我没有尝试任何其他编辑,但我认为他们会有类似的问题.如果我错了,请纠正我.
像sed和awk这样的工具是一种解决方案,但存在问题,因为我不经常使用它们并且需要花一些时间来获取工作,因为我不是这些工具的专家.
答案是:全部......
Ultra编辑可以工作,但我已经有一个编辑器,如果我只是将它用作搜索和替换工具,价格是陡峭的.
Sed,AWK和基于正则表达式的工具可以工作,但在某些情况下可能会很痛苦.
Wild Edit可以工作,而且价格不贵.
我最终的决定是运用我的正则表达技巧.
我开始使用C编程了.我目前有一个包含很多功能的大文件.我想将这些函数移动到一个单独的文件,以便代码更容易阅读.但是,我似乎无法弄清楚如何正确包含/编译,并且无法在我找到的任何在线教程中找到示例.这是一个简化的例子:
#include <stdlib.h>
#include <stdio.h>
void func1(void) {
printf("Function 1!\n");
}
void func2(void) {
printf("Function 2!\n");
}
int main(void) {
func1();
func2();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
如何将C函数移动到单独的文件中?仅供参考:我正在使用gcc.
更新:这些答案非常有用,谢谢.现在似乎我的简化示例不够好,因为我意识到我的程序编译失败的原因是因为我在我的函数中使用了一个全局变量.
#include <stdlib.h>
#include <stdio.h>
int counter = 0;
void func1(void) {
printf("Function 1!\n");
counter++;
}
int main(void) {
func1();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
将这些函数移动到外部文件不起作用,因为它们需要引用此全局变量:
#include <stdlib.h>
#include <stdio.h>
#include "functions.c"
int counter = 0;
int main(void) {
func1();
counter = 100;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个问题?
我听说汽车行业有一种名为MISRA C的东西.
其他高可靠性/可用性/安全性行业的相关标准是什么,例如
-亚当
我有很多.c文件,即实现文件说
来自任何文件的函数可以从不同的文件中调用任何函数.我的问题是,我是否需要.h为A和B的每个实现提供一个ie头文件,其中每个头文件都有A或B 中所有函数的定义.
此外,main.c中会有两个A.h,并B.h #included在里面?
如果有人能够最终说清楚,那么我如何在以后编译并运行终端中的多个文件.
谢谢.
当只有2个模块A和B时,我只能处理最简单的情况
A依赖于B,因此我将B构建为库并在A中包含B的头文件,在构建A时也链接到B库.
当A和B相互依赖时,这将不起作用,当模块数量增加时更是如此.
那么进行模块化开发的一般方法是c/c++什么?
UPDATE
对不起,似乎我的标题是不正常的,重新版本的版本是:如何将模块分成多个.h和.cpp文件(不是一个)?
我在用C编写的程序遇到了一些问题,而且我已经超越了我的知识.总之,我需要将链接列表从一个列表深层复制到另一个列表.这些列表中包含malloc数据,我需要保留所有数据,而不需要指针指向相同的信息.
我只发布了我认为相关的代码.如果我遗漏了任何重要的背景信息,请告诉我.
这是代码:
typedef struct matrix {
char *name;
int R;
int C;
int dim;
void (*concat_matrices)( struct matrix *A, struct matrix *B, struct matrix *ret );
} Matrix;
void concat_matrices( Matrix *A, Matrix *B, Matrix *ret ) {
int L1 = strlen( A->name );
int L2 = strlen( B->name );
int len = L1 + L2;
char *Ap = (char*)malloc(L1*sizeof(char)); strcpy(Ap,A->name);
char *Bp = (char*)malloc(L2*sizeof(char )); strcpy(Bp,B->name);
char *c = (char*)malloc(sizeof(char)*(len + 2));
c[0] = '('; strcat(c, Ap); …Run Code Online (Sandbox Code Playgroud) c ×5
c++ ×3
header ×2
header-files ×2
coding-style ×1
compilation ×1
include ×1
modularity ×1
namespaces ×1
reliability ×1
search ×1
security ×1
syntax ×1