2
我用#pragma once
经常和它似乎做工精细用头和但由于某些原因打交道时,以下代码创建的多个定义链接器错误:的#pragma一次并不妨碍多变量定义
#pragma once
int someVariable=5;
pragma
也不应该这样做吗?
我用#pragma once
经常和它似乎做工精细用头和但由于某些原因打交道时,以下代码创建的多个定义链接器错误:的#pragma一次并不妨碍多变量定义
#pragma once
int someVariable=5;
pragma
也不应该这样做吗?
该编译指示不应该阻止这个吗?
不,在这种情况下,如果此头文件包含在多个位置,则会创建someVariable的多个定义。如果B.h和C.h都包含头文件,则会创建两个someVariable。
更好的办法是只在一个.cpp文件中定义变量,并在其他地方使用extern
。
这有点误导人;如果B.h和C.h在同一个翻译单元中,你仍然只能获得原始头文件的一个副本。问题是当2个cop文件包含它并且它们都在它们的目标文件中时。 –
#pragma曾用于标题中。不要在头文件中定义一个变量!只是宣布它。 #pragma一次只能防止它被同一个文件多次包含,但不能被总共多次(例如,可以被两个不同的文件包含两次)。 – thang
它避免了头部的内容被包含在同一个TU中,而不是跨越TU。通过在标题中定义变量来打破ODR。 –